列出以多个文件扩展名结尾的所有文件?

列出以多个文件扩展名结尾的所有文件?

如果我想要以.fas我知道结尾的文件,我可以使用命令执行以下操作ls

ls -l /users/jenna/bio/*.fas

这列出了所有以.fas.但是如何获取以.fasor结尾的文件.pep

ls -l /users/jenna/bio/(*.fas | *.pep)似乎不起作用?我知道可能还有其他命令可以做到这一点,但是有没有办法让它与 一起工作ls

谢谢你的帮助 !

答案1

用这个: ls -l /users/jenna/bio/*.{fas,pep}

或这个: find /users/jenna/bio -iname '*.pep' -or -iname '*.fas'

答案2

最有可能开箱即用的是大括号扩展。它适用于 bash、zsh 和 ksh。

ls -l /users/jenna/bio/*.{fas,pep}

(大括号周围没有空格。)

在 bash 和 ksh 中,如果其中一个扩展名不匹配,则会显示错误,但仍会列出与另一个扩展名匹配的文件。原因是大括号扩展不是通配符匹配功能,而是文本替换:在 shell 开始查找与模式匹配的文件之前*.{fas,pep}转换为。*.fas *.pep在 zsh 中,您会收到错误并且命令不会运行,但有更好的方法:“或”全局模式。除非没有任何扩展名匹配,否则不会出错。

ls -l /users/jenna/bio/*.(fas|pep)

或者也可以使用图案不同的语法: @(…|…);在 bash 中,需要使用 激活该语法shopt -s extglob,在 zsh 中,需要使用 激活该语法setopt ksh_glob

ls -l /users/jenna/bio/*.@(fas|pep)

(其中一些行为是可以配置的。除非明确指定,否则我的所有语句都适用于 shell 的默认配置。)

答案3

当您想要递归扫描而不会出现通常从find或得到的烦人错误时ls(例如:“没有权限“,”不是目录") 可以阻止脚本或xargs命令,而且tree这里没有提到该命令:

tree -fai / | grep -e ".fas$" -e ".pep$"

上面我使用了 root /,但可以是任何路径:

tree -fai /users/jenna/bio/ |  grep -e ".fas$" -e ".pep$""

顺便提一句

相关内容