2013-05-21 99 views
2

我想要刪除文件夾及其子文件夾中除名爲「* Original.fal」的文件夾外的所有具有特定擴展名的文件 - 「.fal」。問題是,我想刪除具有相同擴展名的其他文件:bash在Linux上,刪除具有特定文件擴展名的文件

  • * Original.fal.ds
  • * Original.fal.ds.erg
  • * Original.fal.ds.erg .neu

還有其他的「.fal」 S,我想刪除爲好,不要有‘原始’的他們。 名稱會隨時變化,所以我無法刪除特定的名稱。 * Original.fal不會有所不同。

我只能起牀到這裏:

$find /disk_2/people/z183464/DOE-Wellen -name "*.fal" \! -name "*Original.fal" -type f -exec echo rm {} \; 

這將是巨大的,如果該命令只能在文件夾中刪除(和它的子文件夾),它被稱爲(執行)

當我運行的代碼它給我一個錯誤:

  1. /disk_2 /人/ z183464/DOE-Wellen:是一個目錄
+0

http://content.hccfl.edu/pollock/Unix/FindCmd.htm – Dilawar

+0

只需重命名您不想刪除的文件,然後執行一個簡單的rm,然後再重新命名該文件。 – Vicky

+0

你的'find'解決方案應該可以正常工作。錯誤消息似乎只是因爲你在兩行中輸入了你的單行。這個'-type f'-stuff應該與上面的東西在同一行,然後它應該起作用。提示:使用'-exec echo rm {} \;'看看它會在沒有'echo'的情況下真正執行它之前做些什麼。 – Alfe

回答

3

如果您不希望find潛水深度過大,您可以使用-maxdepth進行限制。

+0

謝謝,但這並沒有真正回答這個問題...... – Vihar

+0

@Vihar:好吧,問題改變了:-)你必須反斜槓感嘆號,它是bash中的一個特殊字符(與歷史擴展有關)。 – choroba

+0

是的,它確實改變了:)我用\感嘆號之前和之後嘗試過 - 仍然是一樣的...... – Vihar

0

你可以使用一個簡單的for循環。該命令顯示您可能想要刪除的所有文件。將rm更改爲刪除它們。

cd /disk_2/people/z183464/DOE-Wellen && for I in `find . -name "*.fal" ! -name "*Original.fal"`; do echo $I; done 

使用「find ... | grep ...」,如果您需要更多的靈活性,也可以使用正則表達式。

+0

當我運行代碼時,它給了我: /disk_2/people/z183464/DOE-Wellen:是一個目錄 – Vihar

相關問題