如果我想要以.fas
我知道结尾的文件,我可以使用命令执行以下操作ls
:
ls -l /users/jenna/bio/*.fas
这列出了所有以.fas
.但是如何获取以.fas
or结尾的文件.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$""
顺便提一句