回答:
これを使ってこれを行うのが最善かもしれません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
?