Рекурсивно перебирать файлы в каталоге можно легко:
find . -type f -exec bar {} \;
Тем не менее, вышеописанное не работает для более сложных вещей, где необходимо выполнить много условных переходов, циклов и т. Д. Я использовал это для вышеупомянутого:
while read line; do [...]; done < <(find . -type f)
Однако, похоже, что это не работает для файлов, содержащих непонятные символы:
$ touch $'a\nb'
$ find . -type f
./a?b
Есть ли альтернатива, которая хорошо справляется с такими непонятными персонажами?
read line
на IFS= read -r line
. Единственный символ, который сломает это тогда, является новой строкой.
-d $'\0'
предпочтительнее.
find ... -exec bash -c 'echo filename is in \$0: "$0"' {} \;
это лучший способ сделать это.