Допустим, у меня есть список ключевых слов:
$ 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
find
команда не ищет содержание файлов.
-iname
опция выбирает имена файлов.
Ошибка означает это printf
не делает reconize -o
опция. В такой ситуации необходимо использовать printf -- '-o...
Я думаю заключительный фильтр, который Вы ищете:
find some_dir/ -type f \( -iname \*satin\* -o -iname \*perdido\* ... \)
Отметьте \( ... \)
включить весь -iname ...
-o ...
как говорят, POSIX в man find
Необходимо быть уверены что filenames.txt
файл содержит по крайней мере одно значение.
Если необходимо найти имена файлов в some_dir/
, затем дайте попытку этому:
set -f ; find some_dir/ -type f \( $(printf -- ' -o -iname *%s*' $(cat filenames.txt)| cut -b4-) \) ; set +f