скрипт оболочки для рекурсивного обхода файлов - PullRequest
3 голосов
/ 27 июля 2010

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

точки в правильном направлении будет достаточно.Спасибо.

Ответы [ 4 ]

8 голосов
/ 27 июля 2010

Чтобы применить команду (скажем, echo) ко всем файлам ниже текущего пути, используйте

find . -type f -exec echo "{}" \;

для каталогов, используйте -type d

7 голосов
/ 27 июля 2010

Вы должны смотреть на команду find.

Например, чтобы изменить разрешения для всех файлов JPEG в каталоге /tmp:

find /tmp -name '*.jpg' -exec chmod 777 {} ';'

Хотя, если файлов много, вы можете объединить их с xargs для их пакетирования, например:

find /tmp -name '*.jpg' | xargs chmod 777

И в реализациях findи xargs, которые поддерживают нулевое разделение:

find /tmp -name '*.jpg' -print0 | xargs -0 chmod 777
3 голосов
/ 27 июля 2010

Баш 4.0

#!/bin/bash
shopt -s globstar
for file in **/*.txt
do
  echo "do something with $file"
done
2 голосов
/ 27 июля 2010

Для рекурсивного перечисления всех файлов

find . -name '*'

И скажем, например, что вы хотите 'grep' для каждого файла, тогда -

find . -type f -name 'pattern' -print0 | xargs -0 grep 'searchtext'
...