2010-08-15 148 views

回答

5

我想你的意思是 「前面加上」

以後編輯

SH腳本:

 
find . -name ".?*" -exec rm {} \; 
上面的代碼沒有遞歸工作;這個呢。 如果你想刪除文件夾,請使用:
 
find . -name ".?*" -exec rm -R {} \; 

+0

考慮到在問題中使用「遞歸」,我認爲這應該是'-name「。*」'。另外,除非你的系統已經很舊了,並且還不支持它,'-exec rm {} +'會批量調用'rm'而不是每個文件一次。 – Gilles 2010-08-15 22:44:55

+0

@Gilles修復了它,謝謝 – 2010-08-16 09:17:39

+0

你可能想用'find。名稱「._?*」-exec rm {} \;'而不是,因爲只是點將刪除所有以「。」開頭的文件,例如'.git'。 – 2013-07-03 00:28:27

1

編輯:用戶吉爾斯下面正確提到以下替代技術可能是危險的,因爲xargs的不以文件名對待單引號和雙引號字面。名稱爲Today's special.txt的文件將導致錯誤(未終止的引號)。爲了完整起見,我仍然將其包含在內,因爲它在網絡上被廣泛提及。

另一種類似的方式在Unix/Mac上通過管道連接到rm。

find . -name '.*' -type f | xargs rm -f 

-type f參數告訴它忽略目錄和特殊文件等等。,..,符號鏈接和開發者。

我們很遺憾不能使用類似rm -R .*的東西,因爲.*輸入模式在被髮送給rm命令之前由shell展開。它會導致遞歸刪除所有與起始目錄相匹配的文件。

Windows等效命令(del -R .*)對用戶來說要簡單得多,因爲 del程序會爲每個子目錄擴展通配符。

+1

1.'-name'的參數應該只是''。*''。 2.如果存在包含空格或'\「''的文件名(包括前導目錄),這將不起作用,因爲'xargs'特別處理這些字符。除非您確定知道這些字符,否則不要使用'xargs'字符不會出現在任何文件或目錄名稱中,而是使用'-exec'來代替,就像在Gabi的回答中一樣。這裏,由於命令是'rm',因此災難的可能性尤其大。 – Gilles 2010-08-15 22:42:38

+0

-type f確保dirs包括。,..被忽略。雖然在文件中使用了'",但它們的名字卻很好。xargs試圖解釋它們並導致問題。 我會用您的警告更新我的答案。我仍然認爲包含這種做事方式很有用。一個簡單的搜索顯示了許多提及它。 – Alkaline 2010-08-16 02:40:36

2

this post可能重複,我已經成功地使用我自己的生產服務器上:

find /var/www/html \(-name '.DS_Store' -or -name '._*' \) -delete 
0
 
find . \(-name '.DS_Store' -or -name '._*' \) -type f -print0 | xargs -0 rm -f 

使用此命令,包括文件和文件夾在他們的搜索名稱空間,以及。

相關問題