Скрипты Bash: найти все типы файлов и пути - PullRequest
8 голосов
/ 15 июля 2009

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

Ответы [ 4 ]

15 голосов
/ 15 июля 2009

Предполагая, что GNU find (что не является необоснованным), вы можете сделать это, используя просто find:

find /path -type f -name '*.ext' -exec my_cool_script \{\} \;
4 голосов
/ 16 июля 2009

найти путь. Использование xargs обрабатывает длинный список файлов / каталогов. Более того, чтобы правильно обрабатывать имена с пробелами и подобными проблемами, лучшая команда поиска строки, которую я нашел, это:

find ${directory} -name "${pattern}" -print0 | xargs -0 ${my_command}

Хитрость заключается в том, что find -print0 совместим с xargs -0: он заменяет конечные строки на \ 0 для правильной обработки пробелов и экранирующих символов. Использование xargs избавит вас от сообщения «слишком длинная строка», если ваш список файлов слишком длинный.

Вы можете использовать xargs с --no-run-if-empty для обработки пустых списков и --replace для управления сложными командами.

2 голосов
/ 22 августа 2010

Если у вас установлен GNU Parallel http://www.gnu.org/software/parallel/, вы можете сделать это:

find . -name '*.ext' | parallel echo {} '`dirname {}`'

Замените echo вашей любимой командой bash, а ext - расширением файла, которое вы ищете.

Посмотрите вступительное видео для GNU Parallel, чтобы узнать больше: http://www.youtube.com/watch?v=OpaiGYxkSuQ

0 голосов
/ 15 июля 2009

очень похоже на домашнюю работу.

find /path -type f -name "*.ext" -printf "%p:%h\n" | while IFS=: read a b
do
   # execute your bash script here
done

прочитайте справочную страницу find для получения дополнительных опций printf ....

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...