查找命令和反向正则表达式

6

我一直在寻找一种方式来表达这个命令,该命令排除所有可执行权限,而仅包括以“.EXE”结尾的文件。

我一直在使用“find”命令和-exec尝试解决它,请。谢谢。

我尝试过的命令以及其他版本均不起作用:

find . -type f -regex "[^\.EXE$]" -printf "%f\n" -exec chmod a-x {} +

感谢您的帮助,Beco。


编辑:

为了找到正则表达式的“反向”,我经过(更多)研究之后尝试了以下方法:

find . -type f ! -regex ".EXE$" -printf "%f\n" -exec chmod a-x {} +

但这也没有起作用。

1
如果您想使用-regex谓词而不是-name谓词,则需要指定一个正则表达式,该表达式匹配整个名称:-regex“.*.EXE$” - Dima Chubarov
3个回答

10

有一些问题可以通过修改您的命令来解决。

首先是排除条件。要排除 "*.EXE",请使用 ! -name "*.EXE" 命令。原始问题中的条件选择所有包含不同于 \.EX 的字母的文件。

另一件事是,为了实现特定目的,只检查可执行文件是有意义的。可以使用 -executable 谓词来完成这个任务。

剩下的部分似乎没问题。

这里是完整的版本:

 find -executable -type f ! -name "*.EXE"  -exec chmod a-x {} +

0
我知道已经过了很长时间,但我只是想在这里分享一下我的方法。
我完全同意@Dima Chubarov的方法,不过还可以做以下事情:
find . -type f ! -regex ".*\.EXE$" | xargs chmod a-x

请注意,这里我们是对正则表达式模式进行否定(在-regex之前加上!),而不是尝试“不匹配”模式.EXE(使用正则表达式[^\.EXE$],实际上并不能达到你所需的效果,正如@Dima所说。

原始问题中的条件是选择所有包含与\.EX不同的字母的文件。

)

关于xargs命令,对我来说,至少比使用-exec标志更直观,并且当与find命令配合使用时,它可以完美地工作。

谢谢。可能会在将来有用。 - DrBeco

-1
如果 find . -name "*.EXE" -exec chmod a-x {} + 不起作用,那么我会将 "find . -name .. -print" 放入脚本中并编辑脚本。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接