使用一個命令(查找)刪除多種模式的文件

使用一個命令(查找)刪除多種模式的文件

我正在嘗試find刪除當前目錄和子目錄中匹配不同模式的文件並列印匹配的文件以stdout了解哪些文件已刪除。

例如,我想匹配以“&”開頭的所有文件以及以“$”開頭和結尾的所有文件。
我嘗試過使用:

find . -type f -name '&*' -or -type f -name '$*$' -exec rm -v {} \;

rm僅適用於最後一場比賽('$*$')。
因此我嘗試過:

find . -type f -name '&*' -or -type f -name '$*$' -delete

但這不僅匹配最後一個模式,而且不輸出已刪除的檔案。
我知道我可以這樣做:

rm -v ``find -type f -name '&*' -or -type f -name '$*$'``

但我真的很想避免這種方法並透過find命令來完成。

有小費嗎?
提前致謝。

答案1

你的問題是執行僅適用於第二種模式,請嘗試在搜尋條件兩邊加上括號,以解決該問題:

find . \( -type f -name '&*' -or -type f -name '$*$' \) -exec rm -v {} \;

需要注意的是,這不是一個錯誤,而是一個功能,因此您可以執行類似的操作:

find -type f -name '&*' -exec mv '{}' ./backup ';' -or -type f -name '$*$' -exec rm -v '{}' ';'

如果你需要

答案2

儘管齊柏林飛船答案是正確的,我也發現了這個解決方案:

尋找 。 -type f \( -name '&*' -or -name '$*$' \) -print -delete

相關內容