Command-Line
列出以多個文件副檔名結尾的所有文件?
.fas
如果我想要以I know結尾的文件,我可以使用ls
命令執行以下操作:ls -l /users/jenna/bio/*.fas
這列出了所有以 . 結尾的文件
.fas
。但是我怎樣才能獲得以.fas
or結尾的文件.pep
?
ls -l /users/jenna/bio/(*.fas | *.pep)
似乎不起作用?我知道可能有其他命令可以做到這一點,但有沒有辦法讓它工作ls
?謝謝你的幫助 !
用這個:
ls -l /users/jenna/bio/*.{fas,pep}
或這個:
find /users/jenna/bio -iname '*.pep' -or -iname '*.fas'
最有可能開箱即用的是大括號擴展。它適用於 bash、zsh 和 ksh。
ls -l /users/jenna/bio/*.{fas,pep}
(大括號周圍沒有空格。)
在 bash 和 ksh 中,如果其中一個副檔名不匹配,則會顯示錯誤,但會列出與另一個副檔名匹配的文件。這樣做的原因是大括號擴展不是萬用字元匹配功能,而是文本替換:在 shell 開始查找與模式匹配的文件之前
*.{fas,pep}
轉換為。*.fas *.pep
在 zsh 中,你會得到一個錯誤並且命令不會執行,但是有一個更好的方法:“或” glob 模式。除非沒有任何擴展匹配,否則這個不會出錯。ls -l /users/jenna/bio/*.(fas|pep)
或者模式也可以使用不同的語法:
@(…|…)
在 bash 中,這個語法需要用 啟動shopt -s extglob
,而在 zsh 中,這個語法需要用 . 啟動setopt ksh_glob
。ls -l /users/jenna/bio/*.@(fas|pep)
(可以配置其中一些行為。除非明確指定,否則我的所有語句都適用於 shell 的預設配置。)