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

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

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

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

MySQL中的这样的东西select * from folder where filename != '0021bc'

!find命令中否定(反转)后面的选项。 在你的情况下:

 find . ! -iname "002abc*" 

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

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

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

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

 find -name 0021bc -prune -o -print 

你可以找到“所有”文件夹,然后用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" 

你必须把它调到你想要的东西,我很乐意迭代。 如果您阅读了查找的手册页,您将找到许多标记来排序文件和文件夹。