我正在嘗試編寫一個bash命令,它將刪除所有匹配特定模式的文件 - 在本例中,它是所有已構建的vmware日誌文件。Shell腳本:使用bash與xargs
我試過這個命令:
find . -name vmware-*.log | xargs rm
然而,當我運行命令,它都具有名稱中有空格的文件夾嗆了。有沒有辦法格式化文件路徑,以便xargs將它傳遞給rm引用或正確轉義?
我正在嘗試編寫一個bash命令,它將刪除所有匹配特定模式的文件 - 在本例中,它是所有已構建的vmware日誌文件。Shell腳本:使用bash與xargs
我試過這個命令:
find . -name vmware-*.log | xargs rm
然而,當我運行命令,它都具有名稱中有空格的文件夾嗆了。有沒有辦法格式化文件路徑,以便xargs將它傳遞給rm引用或正確轉義?
嘗試使用:
find . -name vmware-*.log -print0 | xargs -0 rm
這使得找到輸出的每個文件名後空字符,並告訴xargs的分手基於空字符,而不是空格或其他標記的名稱。
查看-0
標誌爲xargs
;結合find
的-print0
你應該設置。
find . -name vmware-*.log -print0 | xargs -0 rm
不要使用xargs。找到能做到這一點沒有任何幫助:
find . -name "vmware-*.log" -exec rm '{}' \;
它總是好的以避免開始一個額外的過程,特別是像這樣的事情,你可以提供一些方式來xargs太長。請注意,'find'甚至可以使用'delete'動作來代替'-exec ...' - 但這樣更容易定製。你也不必引用花括號,除非你使用像tcsh這樣的舊shell。 – Cascabel 2009-10-19 18:35:17
但是,這將爲每個文件單獨啓動一個'rm'進程,而不是象'xargs'那樣將多個文件名傳遞給'rm',所以它會變慢。 – JaakkoK 2009-10-19 18:37:03
@jk:這就是爲什麼較新的'find'實現具有'find -exec rm'{}'+',這將像'xargs'一樣對參數進行批量處理。 – ephemient 2009-10-19 18:53:32
GNU查找模式搜索
find . -name vmware-*.log -delete
find . -name vmware-*.log | xargs -i rm -rf {}
find -iname pattern
使用-iname
爲了避免xargs的空間問題,我'd使用新的行字符作爲sep arator與-d選項:
find . -name vmware-*.log | xargs -d '\n' rm
交叉貼:http://serverfault.com/questions/76031/shell-scripting-using-find-to-delete-files-matching-a-pattern – 2009-10-19 20:18:03