xargs和find算是一對死黨懈费。兩者結(jié)合使用可以讓任務(wù)變得更輕松计露。不過,人們通常卻是以一種錯(cuò)誤的組合方式使用它們憎乙。例如:
find . -type f -name "*.txt" -print | xargs rm -f
這樣做很危險(xiǎn)。有時(shí)可能會刪除不必要?jiǎng)h除的文件泞边。我們沒法預(yù)測分隔find命令輸出結(jié)果的定界符究竟是'\n'還是' '。很多文件名中都可能會包含空格符阵谚,而xargs很可能會誤認(rèn)為它們是定界符(例如,hell text.txt會被xargs誤認(rèn)為hell和text.txt)梢什。
只要我們把find的輸出作為xargs的輸入,就必須將-print0與find結(jié)合使用绳矩,以字符null來分隔輸出玖翅。
用find匹配并列出所有的.txt文件割以,然后用xargs將這些文件刪除:
find . -type f -name "*.txt" -print0 | xargs -0 rm -f
這樣就可以刪除所有的.txt文件应媚。xargs -0將\0作為輸入定界符。