_.fas
_で終わるファイルが必要な場合は、ls
コマンドで次のことを実行できることを知っています。
_ls -l /users/jenna/bio/*.fas
_
そして、これは_.fas
_で終わるすべてのファイルをリストします。しかし、どうすれば_.fas
_または_.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では、拡張子の1つが一致しない場合にエラーが表示されますが、他の拡張子に一致するファイルが一覧表示されます。この理由は、中かっこ展開はワイルドカードマッチング機能ではなく、テキストによる置換です。シェルがパターンに一致するファイルの検索を開始する前に、_*.{fas,pep}
_が_*.fas *.pep
_に変換されます。 zshでは、エラーが発生してコマンドが実行されませんが、「または」 glob pattern のようなより良い方法があります。一致する拡張子がない場合、これはエラーになりません。
_ls -l /users/jenna/bio/*.(fas|pep)
_
または、パターンも 別の構文 で使用できます:@(…|…)
; bashでは、この構文は_shopt -s extglob
_でアクティブにする必要があり、zshでは、この構文は_setopt ksh_glob
_でアクティブにする必要があります。
_ls -l /users/jenna/bio/*.@(fas|pep)
_
(この動作の一部は構成できます。明示的に指定されていない限り、すべてのステートメントはシェルのデフォルト構成に適用されます。)
煩わしいエラーなしで再帰的にスキャンしたい場合、通常find
またはls
から取得します(例: "Permission denied "、" ディレクトリではありません ")スクリプトまたはxargs
コマンド、またtree
コマンドはここでは言及されていません。
tree -fai / | grep -e ".fas$" -e ".pep$"
上記では、ルート/
、ただし任意のパスを使用できます。
tree -fai /users/jenna/bio/ | grep -e ".fas$" -e ".pep$""
ちなみに