1. 程式人生 > >前方深坑注意:find結合xargs

前方深坑注意:find結合xargs

       xargs 和 find 算是一對死黨。兩者結合使用可以讓任務變得更輕鬆。不過人們通常卻是以一種錯誤的組合方式使用它們。例如:

       find . -name "*.txt" -print | xargs rm -f

       

       這樣做很危險。有時可能會刪除不必要刪除的檔案。我們沒法預測分隔 find 命令輸出結果的定界符究竟是什麼('\n'或者' ',即便你先用find查詢輸出了想要操作的檔案)。很多檔名中都可能會包含空格符(' '),因此 xargs 很可能會誤認為它們是定界符(例如,hell text.txt會被xargs誤解為hell和text.txt)。

       只要我們把 find 的輸出作為 xargs 的輸入,就必須將 -print0 與 find 結合使用,以字元null('\0')來分隔輸出。

       用 find . -name "*.txt" -print0 | xargs -0 rm -f

       

       這樣就可以刪除所有的.txt檔案。xargs -0 將 \0 作為輸入定界符。

       字文摘自《 Linux Shell指令碼攻略 (第2版) 》