Как я могу прокручивать строки файла и находить файлы, соответствующие каждой строке?

В оболочке BASH я хотел бы взять строки файла (например, pattern.txt ) и найти файлы в моей системе, имена которых содержат шаблоны в каждой строке моего файла. Итак, у меня есть следующий цикл

for pp in `cat pattern.txt`; do find ./ -iname "*${pp}*" -print0; done 

который не находит файлы, если существует первая строка в файле pattern.txt . Итак, как я могу исправить указанную выше командную строку?

Примечание. Каждая строка в моем файле содержит только символы [a-zA-Z].

3 Solutions collect form web for “Как я могу прокручивать строки файла и находить файлы, соответствующие каждой строке?”

Попробуй это:

 #!/bin/bash while IFS= read -r pp; do find . -iname "*${pp}*" -print0 done < /path/to/pattern.txt 

Не уверен, почему вы хотите -print0 , но я все равно оставил его. Возможно, вы пытаетесь xargs это на xargs ?

Вот безопасный и защищенный Windows способ поиска кучи шаблонов имен файлов, извлеченных из файла. Подход, который я выбрал, состоит в том, чтобы обработать список шаблонов в выражение find .

 find_expression=$(<pattern \ sed -e 's/^/-o\n-iname\n*/' \ -e 's/\r\?$/*/' | # turn each pattern into -o -iname *foo* tail -n +2) # remove spurious initial -o set -f # turn off globbing IFS=' ' # split only at newlines find . \( $find_expression \) -print0 set +f; unset IFS # restore defaults 

Ответ @SiegeX будет работать, но если у вас много файлов в файле шаблонов, это может стать медленным и неуклюжим. Вы можете получить гораздо лучшую производительность, используя другой инструмент, например:

 find . | grep -f pattern.txt 

Да, это было все.

  • Использование sed для консолидации разностного вывода
  • Как я могу сопоставить и заменить этот многострочный шаблон в сценарии bash?
  • Заменить между шаблонами, которые начинаются и заканчиваются в разных строках
  • Извлечение IP-адреса из текста и сохранение его в переменной
  • Конкретная замена уровня столбца
  • В верхнем регистре только первая буква каждой строки
  • Можно ли изменить файл yml с помощью сценария оболочки?
  • Grep для нескольких строк, покажите количество строк после одной из строк (но не другой)
  • array выводит все испорченные?
  • Получить строку запроса из URL-адресов в файле журнала
  • В POSIX sed период (точка) соответствует новой строке в многострочном пространстве шаблонов?
  • Linux и Unix - лучшая ОС в мире.