如何遞歸刪除所有JPG文件,但保留包含“sample”的文件

如何遞歸刪除所有JPG文件,但保留包含“sample”的文件

如何尋找並刪除.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

相關內容