如何在 Linux 中使用 find 指令從一組結果中刪除特定檔案?

如何在 Linux 中使用 find 指令從一組結果中刪除特定檔案?

我有以下命令列出所有擴展名為docdocx等的檔案。

find . -maxdepth 1 -iname \*.doc\*

該命令返回許多文件,其中一些我想刪除。例如回傳的結果是

  1. 範例.docx
  2. 虛擬資料.doc
  3. 範例.doc

我想刪除 Sample.doc 和 Dummydata.docx。如何使用該-exec選項刪除檔案。我是否能夠傳遞文件名,例如,rm Dummydata.docx Sample.doc因此命令如下所示

find . -maxdepth 1 -iname \*.doc\* -exec rm Dummydata.docx Sample.doc

{} after我可以傳遞rm`中的檔案名稱嗎?例如

find . -maxdepth 1 -iname \*.doc\* -exec rm {Dummydata.docx} Sample.doc

有更好的方法嗎?

答案1

如果您事先知道檔案的名稱,那麼立即刪除它們會更容易:

find . -iname "Dummydata.doc" -delete

或者,具有多個條件:

find . \( -iname "Dummydata.doc" -o -iname "Sample.doc" \)

括號強制偏好,但您需要轉義或引用它們,因為通常情況下,括號對您的 shell 具有特殊含義。


否則,如果您想先檢查結果列表,您可以將找到的文件的路徑(此處放入)傳遞{}sh。對於該sh命令,路徑將變為$0,您可以將其與要刪除的檔案的名稱進行比較:

find . -maxdepth 1 -iname "*.doc" \
-exec sh -c 'if [ "$0" == "Dummydata.doc" ] || [ "$0" == "Sample.doc" ]; then echo rm "$0"; fi' {} \;

在這裡,echo一旦您確定將刪除正確的文件,就將其刪除。但恐怕手動刪除這些文件會更容易。

相關內容