xargs的基本使用也沒必要多言,這裏主要講一下我使用過程當中遇到的問題:shell
問題出在用find找出的文件傳給xargs處理時,卻出現了問題。我簡化了一下問題,以下:ui
]$ touch "a b" [lyu@swe-vm-kcr-pr01 ~]$ find . -maxdepth 1 -name "a*b" | xargs rm rm: cannot remove `./a': No such file or directory rm: cannot remove `b': No such file or directory
雖然文件名包含空格也是蠻奇葩的,可是世界上就是有各類各樣奇葩的存在。這時候就等於rm a b,天然就報錯了。this
那遇到這種問題該如何處理呢? 答案就是xargs的 -0選項。spa
--null, -0 Input items are terminated by a null character instead of by whitespace, and the quotes and backslash are not special (every character is taken literally). Disables the end of file string, which is treated like any other argument. Useful when input items might contain white space, quote marks, or backslashes. The GNU find -print0 option produces input suitable for this mode.
-0將會使用null來分割參數而不是空格,固然find的輸入也須要使用null來分隔,不然仍是會出錯:
code
$ find . -maxdepth 1 -name "a*b" | xargs -0 rm rm: cannot remove `./a b\n': No such file or directory
而find也提供 -print0功能。ci
$ find . -maxdepth 1 -name "a*b" -print0 | xargs -0 rm
其實xargs還有不少功能,像-L -I選項,不過我仍是用的不多,不過了解一下是最好的,等到用的時候能想到,再去細看不遲。rem