【发布时间】:2021-04-30 17:36:54
【问题描述】:
在 Mac 上使用 bash,我正在尝试检查 .txt 文件的文件夹,并且任何包含项目符号 (•) anywhere 的文件,将这些 .txt 文件移动到新的文件夹/子目录。有什么建议吗?
【问题讨论】:
-
mv *•*.txt newdir应该可以工作 -
@jordanm 在文件名中查找
•,而不是文件内容。
在 Mac 上使用 bash,我正在尝试检查 .txt 文件的文件夹,并且任何包含项目符号 (•) anywhere 的文件,将这些 .txt 文件移动到新的文件夹/子目录。有什么建议吗?
【问题讨论】:
mv *•*.txt newdir 应该可以工作
•,而不是文件内容。
grep 可用于检查文件中是否存在字符:
#!/bin/bash
for filename in ./a/*.txt; do
if grep -q • "$filename"; then
mv "$filename" ./b/
fi
done
【讨论】:
$filename 应该被引用,否则这会破坏带有空格或 shell 元字符的文件名。
如果 .txt 文件名中没有空格(感谢@jordanm,指出
out),您可以在一行中完成 - 您可以使用 grep 告诉您文件名
(-l) 包含一个模式 (-e) 并将它们移动到您的 new_directory:
mv $(grep -l old_directory/*.txt -e •) new_directory/
【讨论】:
mv "$(grep -l old_directory/*.txt -e •)" new_directory/
$( ... ) 部分加上双引号对我不起作用......但我无法理解错误的原因。跨度>
mv "$(grep -l old_directory/*.txt -e •)" new_directory/ 中的引号将按设计工作,当仅找到 1 个文件并且该文件的名称中有空格时。当grep 返回 2 个文件时,路径/文件名将连接起来,带引号的命令将尝试移动 1 个名称类似于 "old_directory/firstfile.txt old_directory/secondfile.txt" 的文件。它将寻找一个包含空格的子目录:firstfile.txt old_directory。我认为不会在该目录中找到secondfile.txt。