Bash表达式列出以模式开头和结尾的文件

时间:2018-03-29 09:04:57

标签: bash shell

在我的shell bash中,我必须选择以abxyz开头且不以.jpg.gif

结尾的文件

这是我所做的,但它不起作用:

$ echo ab*[!.jpg] ab*[!.gif] xyz*[!.jpg] xyz*[!.gif]

3 个答案:

答案 0 :(得分:6)

使用bash的扩展glob语法:

$ touch {ab,xyz}1234.{jpg,gif,txt,doc}

$ shopt -s extglob    
$ echo @(ab|xyz)!(*@(.jpg|.gif))
ab1234.doc ab1234.txt xyz1234.doc xyz1234.txt

感叹号用于否定,@符号用于或。

参考文献:

答案 1 :(得分:2)

使用grep:

ls | grep -E '^ab|^xyz' | grep -E -v '\.jpg$|\.gif$'

-v将反转匹配

答案 2 :(得分:1)

您好,您可以尝试使用以下命令: -

ls {ab*,xyz*}.* | sed '/.jpg/d;/.gif/d'

如果将输出存储到文件中: -

ls {ab*,xyz*}.* | sed '/.jpg/d;/.gif/d' > shortedFile.txt

它将如何运作? ls {ab*,xyz*}.*命令将列出以abxyz开头的所有文件,并使用sed(管道)和{{1}将输出重定向到|命令}}命令将删除以sed.jpg结尾的文件名。

希望这会对您有所帮助