Bash
遞歸遍歷目錄中的文件
遞歸遍歷目錄中的文件可以通過以下方式輕鬆完成:
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 {} \;