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

Jen*_*aiz 10 command-line ls directory files

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

ls -l /users/jenna/bio/*.fas
Run Code Online (Sandbox Code Playgroud)

这列出了所有以.fas. 但是我怎样才能得到以.fas或结尾的文件.pep

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

谢谢你的帮助 !

Mik*_*tov 8

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

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


Gil*_*il' 7

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

\n\n
ls -l /users/jenna/bio/*.{fas,pep}\n
Run Code Online (Sandbox Code Playgroud)\n\n

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

\n\n

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

\n\n
ls -l /users/jenna/bio/*.(fas|pep)\n
Run Code Online (Sandbox Code Playgroud)\n\n

或者模式也可以使用不同的语法@(\xe2\x80\xa6|\xe2\x80\xa6); 在 bash 中,该语法需要使用 激活shopt -s extglob,而在 zsh 中,该语法需要使用 激活setopt ksh_glob

\n\n
ls -l /users/jenna/bio/*.@(fas|pep)\n
Run Code Online (Sandbox Code Playgroud)\n\n

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

\n