我有以下命令列出所有擴展名為doc
、docx
等的檔案。
find . -maxdepth 1 -iname \*.doc\*
該命令返回許多文件,其中一些我想刪除。例如回傳的結果是
- 範例.docx
- 虛擬資料.doc
- 範例.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
一旦您確定將刪除正確的文件,就將其刪除。但恐怕手動刪除這些文件會更容易。