假设我有一个关键字列表:
$ cat filenames.txt
satin
perdido
savoy
stockings
april
lullabye
我想找到某个目录中包含这些关键字的所有文件。
我尝试过类似的事情:
find some_dir/ -type f "$(printf '-or -iname *%s* ' $(cat filenames.txt))"
但不知何故,我无法使用 printf 来构建整个 find 命令;我得到:
-bash: printf: -o: invalid option
答案1
该find
命令不搜索文件的内容。
该-iname
选项选择文件名。
该错误意味着printf
无法识别该-o
选项。在这种情况下,您应该使用printf -- '-o...
我认为您正在寻找的最终过滤器是:
find some_dir/ -type f \( -iname \*satin\* -o -iname \*perdido\* ... \)
注意\( ... \)
将所有-iname ...
-o ...
被称为 POSIXman find
您需要确保该filenames.txt
文件至少包含一个值。
如果您需要在中查找文件名some_dir/
,请尝试以下操作:
set -f ; find some_dir/ -type f \( $(printf -- ' -o -iname *%s*' $(cat filenames.txt)| cut -b4-) \) ; set +f