複数のファイル拡張子で終わるすべてのファイルを一覧表示しますか?

複数のファイル拡張子で終わるすべてのファイルを一覧表示しますか?

私が知っている内容で終わるファイルが必要な場合は、.fas次のコマンドを使用できますls

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

これは、で終わるすべてのファイルを一覧表示します。しかし、またはで終わるファイルをどのように.fas取得できますか?.fas.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では、いずれかの拡張子が一致しない場合はエラーが表示されますが、他の拡張子と一致するファイルは引き続き一覧表示されます。これは、中かっこ拡張がワイルドカード一致機能ではなく、テキスト置換:シェルがパターンと一致するファイルの検索を開始する前に変換されるためです*.{fas,pep}*.fas *.pepzshではエラーが発生し、コマンドは実行されませんが、より良い方法があります:「または」グローバルモード。一致する拡張子がない場合、エラーは発生しません。

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

またはパターンを使用することもできますその他の構文@(…|…); Bashではアクティベーション構文を使用しshopt -s extglob、zshではアクティベーション構文を使用する必要がありますsetopt ksh_glob

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

(この動作の一部は設定可能です。明示的に指定しない限り、すべての説明はシェルのデフォルト設定に適用されます。)

答え3

find通常、またはで発生する迷惑なエラーなしで繰り返しスキャンしたい場合ls(例:許可が拒否されました「、」ディレクトリではありません")はスクリプトまたはxargsコマンドをブロックでき、treeそのコマンドはここに記載されていません。

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

上記ではrootを使用しましたが、/どのパスでも可能です。

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

ところで

関連情報