簡體   English   中英

如何使用正則表達式在MacOS終端中基於擴展名刪除文件?

[英]How to delete files based on the extension in MacOS terminal using regex?

我需要從項目的根文件夾中刪除大量的.zip.apk文件,我想使用bash終端(MacOS X)進行此操作。

到目前為止,我已經通過兩個命令成功實現了:

$ find . -name \*.zip -delete
$ find . -name \*.apk -delete

但是我想使用正則表達式來做到這一點:

$ find . -regex '\w*.(apk|zip)' -delete

但是此正則表達式似乎不起作用,因為它正在刪除任何內容...我在做什么錯?

更多信息:我要刪除的示例是android~1~1~sampleproject.zip

$ find -E . -regex './[~a-zA-Z0-9]+\.(apk|zip)' -delete
  • find嘗試匹配整個文件名。 因此,必須使用./來啟動正則表達式

  • 我相信find不支持\\w \\d等。因此,將其替換為字符類。 但是find還不支持它們,因此您需要添加-E以啟用擴展的正則表達式。

    -E將正則表達式后跟-regex和-iregex主變量解釋為擴展(現代)正則表達式,而不是基本正則表達式(BRE)。 re_format(7)手冊頁完整介紹了這兩種格式。


例如考慮以下命令

$ ls *.json
bower.json  composer.json   package.json

$ find -E . -regex "\./[a-zA-Z0-9]+\.(json)"
./bower.json
./composer.json
./package.json


注意上面的答案專門用於BSD查找。 如果您使用的是GNU find,它將不支持-E選項,而是支持-regextype posix-extended 我可以將上面的示例重寫為

 $ find . -regextype posix-extended -regex "\\./\\w+\\.(json)" 

我會用:

find . -type f \( -name "*.zip" -o -name "*.apk" \) -delete

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM