如何使用 find 按名称排除目录?

如何使用 find 按名称排除目录?

我的系统上有很多目录,其结构如下:

\-----data
       \------- 001abc
       \------- 002abc
       \------- 003abc
       \------- 004abc
       \------- 005abc
       \ ....

当我想查找某个目录时,我只需输入,find . -iname "002abc*"但如何才能找到排除某些名称匹配的目录?

在 MySQL 中类似这样select * from folder where filename != '0021bc'

答案1

!在命令中使用find来否定(反转)后面的选项。对于您的情况:

find . ! -iname "002abc*"

并且可选地仅匹配文件夹:

find . ! -iname "002abc*" -type d

将列出除与模式匹配的文件夹之外的所有文件夹002abc*

!有时在 shell 脚本中可能会出现问题,因此正如 Flimm 指出的那样,该-not参数是它的一个非常有用的同义词。

答案2

您可以找到“所有”文件夹,然后选择您不想要的文件夹grep -v(或使用 egrep)

find . -iname "abc*" | grep -v 002

如果要选择多个名称,可以使用顺序 grep -v 或一个 egrep 语句。

find . -iname "abc*" | grep -v 002 | grep -v 003

或者

find . -iname "abc*" | egrep -v "002|003"

您必须根据自己的需要对其进行调整,我很乐意进行迭代。如果您阅读 find 的手册页,您还会发现许多用于对文件和文件夹进行排序的标志。

答案3

find -name 0021bc -prune -o -print

相关内容