1. 程式人生 > >巧用xargs處理棘手的檔案

巧用xargs處理棘手的檔案

當有許多檔案需要識別出來並清理掉的時候,你可能會想到用find/xargs的命令組合
不過你很快會發現,當linux/unix上檔案命名帶有空格之類的(在windows上這沒什麼大驚小怪的)那就束手無策了

e.g:
ibusybox:test ibusybox$ find .
.
./aaaa bbbb
./cccc
ibusybox:test ibusybox$ find . -type f | xargs rm
rm: ./aaaa: No such file or directory
rm: bbbb: No such file or directory

不過還好find/xargs已經早就想到了這個問題,xargs 的-0選項就是為-print0量身定製的,man一下xargs或者是find 你會看到-print0這個選項詳細介紹
或者更直接點,直接find . -type f -print0和find . -type f比較一下就知道為什麼了 哈
e.g:
ibusybox:test ibusybox$ find . -type f -print0 | xargs -0 rm
ibusybox:test ibusybox$ ls
ibusybox:test ibusybox$

而且你會有另外一個驚喜,那就是這個命令組合可以對任意數量的檔案做操作(不過如果允許你刪除整個目錄,那當然是直接上層目錄rm -r拉)
e.g:
ibusybox:test ibusybox$ rm *
bash: /bin/rm: Argument list too long
ibusybox:test ibusybox$ find . -type f -print0 | xargs -0 rm
ibusybox:test ibusybox$ ls
ibusybox:test ibusybox$