UNIX下如何刪除某個目錄下所有包含某個字串的檔案?

UNIX下如何刪除某個目錄下所有包含某個字串的檔案?

我發現了幾個只要檔案名稱中沒有空格就可以工作的範例。不幸的是,我的檔案名稱中有空格(不是我的選擇,事實上它們是我需要刪除的)。

例如,我認為這會起作用:

尋找 。 -類型 f | ).MOV | grep ).MOV | xargs rm

因為我想刪除以下文件:

  • L112 (1).MOV
  • L113 (1).MOV
  • L113 (2).MOV
  • ETC。

我想保留這些文件

  • L112.MOV
  • L113.MOV
  • L114.MOV
  • ETC。

這可以正確找到文件:

尋找 。 -類型 f | grep ).MOV

但是當我透過管道將其傳輸到 rm 時,檔案名稱中的空格將其搞砸了。

任何幫助將不勝感激。

答案1


rm *\).MOV

答案2

告訴xargs使用換行符號作為分隔符號:

find . -type f | grep ).MOV | xargs -d'\n' rm

更好的是,find進行匹配和使用-print0xargs -0允許任何檔案名稱中的字符,甚至\n

find . -type f -name '*).MOV' -print0 | xargs -0 rm

更好的是,直接find打電話就好了rm

find . -type f -name '*).MOV' -exec rm {} +

最好跳過rm並進行find刪除。

find . -type f -name '*).MOV' -delete

或者在這種具體情況下,誰需要所有重型機械?

rm *\).MOV

答案3

嘗試這個:

find . -name "*).MOV" -exec rm {} \;

答案4

在大多數 Unix 安裝中,您可以透過在檔案名稱前面加上反斜線來表示檔案名稱中的空格。例如,試試看:

mkdir blah
cd blah
touch file1
touch file2
touch "file 3"
touch "file 4"

執行“ls”,您應該會看到以下內容:

文件3 文件4 文件1 文件2

現在執行“ls *\ *”,您應該會看到其中包含空格的所有內容:

文件 3 文件 4

那麼也許您只需要一個“rm *\ *”?或稍微修改該正規表示式以滿足您的需求。

希望有幫助!

相關內容