我的系统上有很多目录,其结构如下:
\-----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