我正在嘗試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