私が知っている内容で終わるファイルが必要な場合は、.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 *.pep
zshではエラーが発生し、コマンドは実行されませんが、より良い方法があります:「または」グローバルモード。一致する拡張子がない場合、エラーは発生しません。
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$""
ところで