2009-08-06 102 views
1

我可以在Linux中使用什麼命令檢查文件名末尾是否包含~的給定目錄(或其子目錄)中的文件?用於刪除所有文件的Linux命令

例如,如果我在一個名爲t的目錄中包含許多子目錄等,我想刪除所有以~結尾的文件。

+1

RM -r *〜對我的作品 – 2009-08-06 02:14:04

+3

可能* *似乎工作,@Shadow,但我認爲那是因爲你'做錯了:-)如果你在一個帶有x〜文件的目錄中運行該命令,* shell *會在rm發現它之前將*〜擴展到x〜 - 這意味着沒有子目錄會被完成。而且,如果當前目錄中沒有VIM備份文件,則shell會抱怨。 – paxdiablo 2009-08-06 02:32:04

回答

1

你可以使用find,grep,rm組合,類似於

查找| grep「〜」| xargs的RM -f

也許別人有更好的想法:)

+0

這一個也會刪除〜b等等 – njsf 2009-08-06 02:17:46

2
find ./ -name '*~' -print0 | xargs -0 rm -f 

這裏find將搜索目錄./和所有子目錄,濾波匹配水珠「*〜」和打印他們的文件名(含proper quoting courtesy of alberge)。將結果傳遞給xargs以附加到rm -f,並將生成的字符串運行在shell中。您可以使用多個路徑,並且還有很多其他可用的過濾器(只讀man find)。

9

小心文件名中含有空格!

find ./ -name "*~" -type f -print0 | xargs -0 rm 
+0

'-type f'是的。這是最好的,但rm -f無論如何都會默默地跳過它們。 – dmckee 2009-08-06 02:12:34

+0

什麼是--print0 | xargs -0是什麼意思? 和哪裏應該類型-f去? – Kys 2009-08-06 02:18:25

+0

print0和-0爲xargs,使用NULL來終止流中的每個文件名。沒有這兩件事,文件「a b c.txt」被視爲三個文件「a」,「b」和「c.txt」。而且我把-type f放進去,並且upvoted,因爲現在是更好的答案:-) – paxdiablo 2009-08-06 02:27:09

8

與GNU找到

find /path -type f -name "*~" -exec rm {} + 

find /path -type f -name "*~" -delete 
+1

+1,這兩種解決方案避免了爲每個要刪除的文件分配一個新的進程;第二個稍微好一些,因爲如果你要刪除大量的文件,它永遠不會遇到命令行長度限制的問題。 – 2009-08-06 02:20:55

相關問題