найти каталоги / имя файла

У меня есть файл с именем client.txt, который содержит названия компаний, как показано ниже

google
amazon
facebook
apple

С этими названиями компаний у меня есть папки и файлы. Я хочу знать путь ко всем папкам / файлам и вывод должен хранить в файле. Например:

ls -R | grep google\|amazon

Если я использую эту команду, я получу путь к файлам / каталогам Google и Amazon. Точно так же мне нужно для всех имен клиентов, доступных в этом файле, что также в сценариях оболочки.

0
задан 16 September 2019 в 18:19

2 ответа

Используя сценарии для построения find команда можно было сделать что-то как (Read man find;man bash):

# Goal: find $dir -name 'google -o -name 'amazon' -o -name 'facebook' ... -print
#
dir="starting directory"
#
names=""
for name in $(cat client.txt) ; do
    if [[ -z "$names" ]] ; then
        names="-name '$name' "
    else
        names="$names -o -name '$name' "
    fi
done
# use 'eval' to expand the 'names' variable at the right time
eval find $dir $names -print
0
ответ дан 23 October 2019 в 11:45

Несколько quick'n'dirty путей - на основе Вашего grep подход:

find . -print0 | grep -Fzf client.txt

или

shopt -s globstar
printf '%s\0' **/* | grep -Fzf client.txt

И будет безопасно для любых легальных имен файлов и даст разграниченный пустым указателем список путей, которые можно передать другой программе. Примечание, что оба будут соответствовать записям от client.txt где угодно в пути - который не может быть тем, что Вы хотите.

А более сложный путь, собирая список -name аргументы в пользу find использование массива оболочки:

while IFS= read -r client; do namearr+=(-name "$client" -o); done < client.txt

find . \( "${namearr[@]}" -false \) -print

Изменение -print к -print0 для получения разграниченных пустым указателем результатов как другие методы. Примечание, что это соответствует точным именам файлов . Вы могли измениться -name "$client" на [1 110] для получения подстановочного соответствия в имени файла (или к [1 111] для получения соответствия где угодно в пути, подобном grep - базирующиеся решения).

0
ответ дан 23 October 2019 в 11:45

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

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