如何使用正则表达式根据MacOS终端中的扩展名删除文件?

时间:2016-12-02 09:31:16

标签: regex bash terminal

我需要从项目的根文件夹中删除大量的.zip.apk文件,我希望使用bash终端(MacOS X)。

到目前为止,我已成功使用两个命令:

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

但是我想用一个正则表达式来做这个:

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

但这个正则表达似乎不起作用,因为它删除了任何东西......我做错了什么?

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

2 个答案:

答案 0 :(得分:2)

UPDATE emp AS t1 INNER JOIN
(SELECT mgr FROM emp WHERE mgr = t1.empno) AS t2
SET sal = sal + 5000
WHERE t1.sal <50000;
  • $ find -E . -regex './[~a-zA-Z0-9]+\.(apk|zip)' -delete 尝试匹配整个文件名。因此,有必要使用find

  • 启动正则表达式
  • 我认为./不支持find \w等。因此请将其替换为字符类。但\d也不支持它们,因此您需要添加find以启用扩展正则表达式。

      

    -E解释正则表达式,然后将-regex和-iregex原色作为扩展(现代)正则表达式解释 -                sions而不是基本的正则表达式(BRE)。 re_format(7)手册页完全描述了 -                垫。

示例

例如,请考虑以下命令

-E

<小时/> 注意以上答案专门针对BSD查找。如果您使用的是GNU查找,则它不支持$ 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

答案 1 :(得分:1)

我会用:

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