回答:
これを使ってこれを行うのが最善かもしれませんfind:
find ./foldername -maxdepth 1 -name '*.atest' -o -name '*.btest' -o -name '*.test'
-maxdepth 1、ls動作をより厳密にエミュレートします
-maxdepthはGNU拡張機能であることに注意してください。グロブと3つのその他の相違点に注意してください:find隠しファイルではなく、ソートリストが含まれ、バイトが(のような有効な文字を形成していない含まれているファイル名と一致するように失敗していました$'St\xe9phane.atest'UTF-8ロケールで)
に
ls -d ./foldername/*.{a,b,}test
{a,b,...} はglob演算子ではありません。これはブレース展開であり、最初に次のように展開されます。
ls -d ./foldername/*.atest ./foldername/*.btest ./foldername/*.test
そして、各グロブは個別に展開され、いずれかのグロブが一致しない場合、コマンドは期待どおりにキャンセルされますzsh(またはfish;ではbash、failglob同様の動作を行うためのオプションが必要です)。
ここでは、それらすべてのファイルに一致する単一のグロブを使用し、その1つのグロブがどのファイルにも一致しなかった場合にのみコマンドをキャンセルします。
ls -d ./foldername/*.(a|b|)test
nullglobどのglobも一致しlsない場合は引数なしで実行されるため、を使用したくないので、現在のディレクトリをリストします。cshnullglob一致しないグロブを削除しますが、すべてのグロブが一致しない場合はコマンドをキャンセルするため、この点でより優れています。
を使用するのは望ましくありません。これはnonomatch、bashその動作が壊れてしまうのが残念であるためです。
両方で動作グロブ代替のためにzshとbash、あなたは(kshのグロブを使用することができますset -o kshglobにzshし、shopt -s extglob中bash)。
次に、あなたはやります:
ls -d ./foldername/*.@(a|b|)test
または:
ls -d ./foldername/*.?([ab])test
グロブが一致しないときに文字通り渡されないようfailglobにbashするには、オプションを追加しますls。
参照してくださいなぜnullglobがデフォルトではないでしょうか?詳細については。
?(...)または+(...)bash を使用する必要がありました。
/dev/null?