如何使用regex在MacOS终端中删除基于扩展名的文件?
我需要从我的项目根文件夹中删除大量的如何使用regex在MacOS终端中删除基于扩展名的文件?,regex,bash,terminal,Regex,Bash,Terminal,我需要从我的项目根文件夹中删除大量的.zip和.apk文件,我想使用bash终端(MacOS X)来完成 到目前为止,我已经成功地使用了两个命令: $ find . -name \*.zip -delete $ find . -name \*.apk -delete 但我想使用正则表达式在一个中完成: $ find . -regex '\w*.(apk|zip)' -delete 但是这个正则表达式似乎不起作用,因为它正在删除任何内容。。。我做错了什么 更多信息: 我想删除的一个例子是and
.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将紧跟-regex和-iregex原色的正则表达式解释为扩展(现代)正则表达式- 而不是基本正则表达式(BRE)。re_format(7)手册页充分描述了这两种- 垫子-E
示例
例如,考虑以下命令
$ ls *.json
bower.json composer.json package.json
$ find -E . -regex "\./[a-zA-Z0-9]+\.(json)"
./bower.json
./composer.json
./package.json
注意上述答案专门针对BSD find。如果您使用的是GNU find,它将不支持
-E
选项,而是支持-regextype posix extended
。我可以将上面的例子改写为
$ find . -regextype posix-extended -regex "\./\w+\.(json)"
尝试匹配整个文件名。因此,有必要使用find
/
- 我相信
不支持find
\w
等。所以用字符类替换它们。但是\d
也不支持它们,因此需要添加find
以启用扩展正则表达式 -E将紧跟-regex和-iregex原色的正则表达式解释为扩展(现代)正则表达式- 而不是基本正则表达式(BRE)。re_format(7)手册页充分描述了这两种- 垫子-E
示例
例如,考虑以下命令
$ ls *.json
bower.json composer.json package.json
$ find -E . -regex "\./[a-zA-Z0-9]+\.(json)"
./bower.json
./composer.json
./package.json
注意上述答案专门针对BSD find。如果您使用的是GNU find,它将不支持
-E
选项,而是支持-regextype posix extended
。我可以将上面的例子改写为
$ find . -regextype posix-extended -regex "\./\w+\.(json)"
我将使用:
find . -type f \( -name "*.zip" -o -name "*.apk" \) -delete
我将使用:
find . -type f \( -name "*.zip" -o -name "*.apk" \) -delete
在正则表达式中
表示任何字符(类似于glob的?
)@Aserre在这种情况下的结果与\w*\(apk | zip)
添加行尾锚点查找相同-正则表达式“\w\(apk | zip)$”-删除
效率更高:^.*\(apk | zip)$
。在正则表达式中使用\w
意味着名称中带有空格的文件将不会被删除matched@Aserre一开始不需要帽子,因为。*是贪婪的。此外,find的默认正则表达式需要括号转义。在正则表达式中,
表示任何字符(类似于glob的?
)@Aserre在这种情况下与\w*\(apk | zip)
添加行尾锚点find的结果相同-正则表达式“\w\(apk | zip)$”-删除
效率更高:^.*\(apk | zip)$
。在正则表达式中使用\w
意味着名称中带有空格的文件将不会被删除matched@Aserre一开始不需要帽子,因为。*是贪婪的。另外,find的默认正则表达式需要括号转义。没有,可能是因为它不包含~
?(请参阅更新的问题)find needs括号中使用的默认正则表达式和+escaping as uses BRE。@josemigallas将~
以及添加到字符类中。更新答案。@nu11p01n73R关于示例,最好使用*/
,这样子文件夹中的文件也会匹配。@123我安全地忽略了这一点,因为op已经从我的项目根文件夹中写入了.zip和.apk文件。在测试目录中,我有太多的json文件,所以我懒得列出所有的json文件并删除一些;)没有,可能是因为它不包括~
?(请参阅更新的问题)find needs括号中使用的默认正则表达式和+escaping as uses BRE。@josemigallas将~
以及添加到字符类中。更新答案。@nu11p01n73R关于示例,最好使用*/
,这样子文件夹中的文件也会匹配。@123我安全地忽略了这一点,因为op已经从我的项目根文件夹中写入了.zip和.apk文件。在测试目录中,我有太多的json文件,所以我懒得列出所有的json文件并删除一些;)