我正在尝试查找目录中不包含字母 a、b 或 c 的所有文件;为什么这个命令不起作用?
ls *[!abc]*
示例: 例如: MATCH:xyz,dkh,文件,foo;不匹配:bar、bxc、azi、csk
答案1
您的命令执行的操作与您想要的非常相似:它扩展到文件名列表不是确切地说:a
、b
、 或c
。如果您测试,您会看到:
$ touch a b c d
$ ls *[!abc]*
d
但如果您创建另一个文件并重新测试:
$ touch argh
$ ls *[!abc]*
argh d
要排除在任何地方包含这些字符的文件名,请使用:
$ shopt -s extglob
$ ls !(*[abc]*)
d
另一种方法(同样使用扩展的 glob)是显式列出模式:
$ ls !(*a*|*b*|*c*)
d