
如何尋找並刪除.jpg
目錄樹中的所有檔案(檔案名稱中包含“sample”的檔案除外)?
例如 :
a.zip -> keep it
b.jpg -> delete it
a-sample.jpg -> keep it
b-Sample.jpg -> keep it
答案1
刪除所有以 . jpg
(不區分大小寫)除了sample
檔案名稱中包含的檔案(不區分大小寫:
find . ! -iname '*sample*' -iname '*.jpg' -delete
這將從目前目錄開始遞歸遍歷樹中的所有目錄。
怎麼運作的:
.
這指定我們從當前目錄開始。
! -iname '*sample*'
這指示
find
忽略sample
名稱中包含的所有檔案。 in使i
該-iname
測試用例不敏感。-iname '*.jpg'
此條件與前一個條件相加,查找以
.jpg
.-delete
這指示
find
刪除所有此類文件。
在運行上述命令之前,您可能需要對其進行測試。跑步:
find . ! -iname '*sample*' -iname '*.jpg'
這將列印出感興趣的文件。如果此列表正確,則再次執行該命令並-delete
附加。
答案2
在 bash 中,您可以使用
shopt -s extglob
啟用負匹配:
rm !(*[Ss]ample*).jpg
若要也符合子資料夾,請打開
shopt -s globstar
並使用雙星:
rm **/!(*[Ss]ample*).jpg