我必须搜索没有模式的文件: -
*abc*.txt and *xyz*.txt
请建议一种方法来列出所有不具备上述模式的文件。
答案 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"