查找命令和逆正则表达式

问题描述 投票:0回答:3

我正在寻找一种表达此命令的方法,该命令排除所有可执行权限,除了那些以“.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 {} +

但这也行不通。

regex find exec inverse
3个回答
10
投票

很少有事情可以用你的命令来修复

首先是排除条件。要排除“*.EXE”,请说

! -name "*.EXE"
。 OP 中的条件采用包含不同于
\
.
E
X
的字母的所有文件。

另一件事是,出于此特定目的,仅检查可执行文件是有意义的。这可以通过

-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所说

OP 中的条件采用包含不同于

\
.
E
X
的字母的所有文件。

关于

xargs
命令,至少对我来说,比使用
-exec
标志更直观,并且与
find
命令结合使用时效果非常好。


-1
投票

如果

find . -name "*.EXE" -exec chmod a-x {} +
不起作用,那么我只需“find . -name .. -print”到脚本中并编辑脚本。

© www.soinside.com 2019 - 2024. All rights reserved.