我正在寻找一种表达此命令的方法,该命令排除所有可执行权限,除了那些以“.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 {} +
但这也行不通。
很少有事情可以用你的命令来修复
首先是排除条件。要排除“*.EXE”,请说
! -name "*.EXE"
。 OP 中的条件采用包含不同于 \
、.
、E
或 X
的字母的所有文件。
另一件事是,出于此特定目的,仅检查可执行文件是有意义的。这可以通过
-executable
谓词来完成。
剩下的好像还好。
这是完整版
find -executable -type f ! -name "*.EXE" -exec chmod a-x {} +
我知道已经过去很长时间了,但我只想在这里分享我的方法。
我完全同意@Dima Chubarov 的方法,但是也可以执行以下操作:
find . -type f ! -regex ".*\.EXE$" | xargs chmod a-x
请注意,这里我们否定正则表达式模式(在
!
之前使用-regex
),而不是尝试“不匹配”模式.EXE
(使用正则表达式[^\.EXE$]
,这实际上并不能满足您的需要,正如@Dima所说
OP 中的条件采用包含不同于
、\
、.
或E
的字母的所有文件。X
)
关于
xargs
命令,至少对我来说,比使用 -exec
标志更直观,并且与 find
命令结合使用时效果非常好。
如果
find . -name "*.EXE" -exec chmod a-x {} +
不起作用,那么我只需“find . -name .. -print”到脚本中并编辑脚本。