Shell-Script
如何根據不同的名稱查找文件並在一行中刪除所有文件
我知道如何根據不同的名稱查找文件。問題是我不知道如何一次刪除所有這些。我在 z/OS390 中使用 OMVS。
要查找按不同副檔名搜尋的文件,我正在成功執行以下操作:
find . -name "*.xml" -o -name "*.ipm" -type f
要在僅搜尋一個名稱後刪除文件,我正在成功執行以下操作:
find . -name "*.xml" -type f -exec rm -iv {} \;
好吧,如果我混合了這兩個想法,我只會刪除最後一個找到的文件:
find . -name "*.xml" -o -name "*.ipm" -type f -exec rm -iv {} \;
在這種情況下,與第一個模式 ( ) 匹配的文件似乎
*.xml
不受-exec rm
.在四處搜尋之後,我猜想問題是我必須在執行
rm
. 我嘗試了三種方法都沒有成功…第一次嘗試:
$ find . -name "*.xml" - o -name "*.ipm" -type f -print0 | xargs -0 FSUM6372 Unknown option "-" Usage: find directory ... expression xargs: FSUM6001 Unknown option "-0" Usage: xargs Ý-l#¨Ý-L #¨ Ý-irepl¨Ý-I repl¨ Ý-n#¨ Ý-tpx¨ Ý-s#¨ Ý-eeof¨Ý-E eof¨ Ýc md Ýargs ...¨¨
第二次嘗試:
$ find . (-name "*.xml" - o -name "*.ipm") -type f FSUM7332 syntax error: got (, expecting Newline
第三次嘗試:
$ find . -type f \(-name "*.xml" -o -name "*.ipm"\) FSUM6372 Unknown option "(-name" Usage: find directory ... expression
您的括號嘗試在它們周圍缺少空格,因此
find
看到了一個名為(-name
但不知道如何處理的選項。相反,在括號周圍添加空格,例如:find . \( -name "*.xml" -o -name "*.ipm" \) -type f -exec rm -iv {} \;
此外,如果您有 GNU,則可以
find
使用-delete``-exec rm -iv {} \;
正如萬用字元所指出的,由於我們正在執行一個可以接受參數列表的命令,我們可以通過使用
+
to terminate-exec
而不是\;
. 將路徑收集+
到-exec
集合中,並通過應用程序的一次呼叫(此處rm
)應用它們,而不是為每個路徑呼叫一次應用程序。因此,如果您沒有或不想使用-delete
更有效的解決方案,請執行以下操作:find . \( -name "*.xml" -o -name "*.ipm" \) -type f -exec rm -iv {} +