Bash

遞歸遍歷目錄中的文件

  • October 7, 2019

遞歸遍歷目錄中的文件可以通過以下方式輕鬆完成:

find . -type f -exec bar {} \;

然而,上述方法不適用於更複雜的事情,其中​​需要完成大量條件分支、循環等。我曾經在上面使用它:

while read line; do [...]; done < <(find . -type f)

但是,這似乎不適用於包含晦澀字元的文件:

$ touch $'a\nb'
$ find . -type f
./a?b

是否有替代方法可以很好地處理這些晦澀的字元?

安全find的另一種用途:

while IFS= read -r -d '' -u 9
do
   [Do something with "$REPLY"]
done 9< <( find . -type f -exec printf '%s\0' {} + )

(這適用於任何 POSIX find,但外殼部分需要 bash。使用 *BSD 和 GNU find,您可以使用-print0代替-exec printf '%s\0' {} +,它會稍微快一些。)

這使得在循環中使用標準輸入成為可能,並且它適用於任何路徑。

這樣做很簡單:

find -exec sh -c 'inline script "$0"' {} \;

或者…

find -exec executable_script {} \;

引用自:https://unix.stackexchange.com/questions/139363