Linux 中 find 命令的否定顺序重要吗?

Linux 中 find 命令的否定顺序重要吗?

我正在尝试否定 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

相关内容