[英]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
-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.