平常我們經常把find和xargs搭配使用,例如:
find . -name "*.txt" | xargs rm
但是這個命令如果遇到文件名里有空格或者換行符,就會出錯。因為xargs識別字符段的標識是空格或者換行符,所以如果一個文件名里有空格或者換行符,xargs就會把它識別成兩個字符串,自然就出錯了。
這時候就需要-print0和-0了。
find -print0表示在find的每一個結果之后加一個NULL字符,而不是默認加一個換行符。find的默認在每一個結果后加一個'\n',所以輸出結果是一行一行的。當使用了-print0之后,就變成一行了
然后xargs -0表示xargs用NULL來作為分隔符。這樣前后搭配就不會出現空格和換行符的錯誤了。選擇NULL做分隔符,是因為一般編程語言把NULL作為字符串結束的標志,所以文件名不可能以NULL結尾,這樣確保萬無一失。
所以比較我們推薦的比較保險的命令是
find . -name "*.txt" -print0 | xargs -0 rm