Lặp đi lặp lại qua các tệp trong một thư mục có thể dễ dàng được thực hiện bằng cách:
find . -type f -exec bar {} \;
Tuy nhiên, ở trên không hoạt động cho những thứ phức tạp hơn, trong đó rất nhiều nhánh có điều kiện, vòng lặp, vv cần phải được thực hiện. Tôi đã từng sử dụng điều này cho ở trên:
while read line; do [...]; done < <(find . -type f)
Tuy nhiên, có vẻ như điều này không hoạt động đối với các tệp chứa các ký tự tối nghĩa:
$ touch $'a\nb'
$ find . -type f
./a?b
Có một sự thay thế xử lý tốt các nhân vật tối nghĩa như vậy?
read line
thành IFS= read -r line
. Nhân vật duy nhất sẽ phá vỡ nó sau đó là một dòng mới.
-d $'\0'
thích hợp hơn.
find ... -exec bash -c 'echo filename is in \$0: "$0"' {} \;
là một cách tốt hơn để làm điều đó.