我正在尝试否定 find 命令,以便获取除命令中的文件之外的所有其他文件。
find . -maxdepth 1 -regextype posix-egrep -regex '.*/.*\.svg' -exec echo {} \;
根据我上次邮政看来我得领先-not
了-regex
。
如果我尝试执行该命令,它会失败,即它返回不允许的消息,或者我是否执行不正确?
find . -maxdepth 1 -not -regextype posix-egrep -regex '.*/.*\.svg' -exec echo {} \;
或者
find . -maxdepth 1 ! \( -regextype posix-egrep -regex '.*/.*\.svg' -exec echo {} \; \)
答案1
除非您有问题中未提及的要求,否则您就是在不必要地使事情复杂化。只需尝试以下方法:
find . -maxdepth 1 -type f | grep -v *\.svg
find
将默认打印它找到的文件名;你不需要echo {}
。你也根本不需要正则表达式;你可以简单地运行:
find . -maxdepth 1 ! -name "*.svg"
无论如何,即使你做过需要正则表达式,因为您使用了一个不必要的复杂表达式。*\.svg
会做得一样好.*/.*\.svg
;因为您感兴趣的只是文件名的结尾,所以不需要指定有关父目录的任何信息。
也就是说,除非你想要以文字开头的文件.
,否则请运行
find . -maxdepth 1 ! -name "\.*\.svg"
如果你真的需要regex
(我强调你不需要你在问题中陈述的内容)你可以像任何其他标志一样否定它:
find . -maxdepth 1 -regextype posix-egrep ! -regex '.*/.*\.svg'
!
意思是not
。它的位置其实很合逻辑,它就在你想要否定的任何东西之前。在上面的例子中,你否定的是regex
,而不是 ,regextype
这就是为什么!
就在 之前-regex
。