列出bash中与模式不匹配的所有文件

时间:2017-08-21 10:59:12

标签: bash shell unix

我必须搜索没有模式的文件: -

*abc*.txt and *xyz*.txt

请建议一种方法来列出所有不具备上述模式的文件。

4 个答案:

答案 0 :(得分:2)

您可以使用扩展的glob,例如:

!(*@(abc|xyz)*.txt)

在ksh中,默认情况下这是有效的,而在bash中,您需要先启用shell选项:

shopt -s extglob

!否定匹配,@匹配任何以管道分隔的模式。

此模式会扩展为不匹配*abc*.txt*xyz*.txt的文件列表,因此您可以将其传递给其他命令以查看结果,例如printf

printf '%s\n' !(*@(abc|xyz)*.txt)

答案 1 :(得分:2)

使用find命令:

find -type f ! \( -name '*abc*.txt' -o -name '*xyz*.txt' \)

答案 2 :(得分:0)

您可以将--hide=PATTERN选项与ls一起使用。在你的情况下,它将是

ls --hide="*abc*.txt" --hide="*xyz*.txt"

答案 3 :(得分:0)

我得到了解决方案,简单的grep正在为我工​​作

ls | grep -v "abc" | grep -v "xyz"