查找此目录中名称中不包含“a”“b”或“c”的所有文件名

查找此目录中名称中不包含“a”“b”或“c”的所有文件名

我正在尝试查找目录中不包含字母 a、b 或 c 的所有文件;为什么这个命令不起作用?

ls *[!abc]*

示例: 例如: MATCH:xyz,dkh,文件,foo;不匹配:bar、bxc、azi、csk

答案1

您的命令执行的操作与您想要的非常相似:它扩展到文件名列表不是确切地说:ab、 或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

相关内容