Command-Line

列出以多個文件副檔名結尾的所有文件?

  • August 6, 2018

.fas如果我想要以I know結尾的文件,我可以使用ls命令執行以下操作:

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

這列出了所有以 . 結尾的文件.fas。但是我怎樣才能獲得以.fasor結尾的文件.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 的預設配置。)

引用自:https://unix.stackexchange.com/questions/273207