Найти все файлы по списку имен / шаблонов файлов [дублировать]

Допустим, у меня есть список ключевых слов:

$ 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
задан 24 December 2018 в 12:51

1 ответ

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
1
ответ дан 7 December 2019 в 15:09

Другие вопросы по тегам:

Похожие вопросы: