Shell-Script

如何根據不同的名稱查找文件並在一行中刪除所有文件

  • April 22, 2020

我知道如何根據不同的名稱查找文件。問題是我不知道如何一次刪除所有這些。我在 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 {} +

引用自:https://unix.stackexchange.com/questions/286782