[max | min] .txtのような名前パターンのリストファイルが欲しいので
ls [max|min].txt
、bashシェルで実行しますが、機能せず、次のエラーメッセージが表示されます
。ls:アクセスできません[max:そのようなファイルはありませんまたはディレクトリ
それで、この仕事をする正しい方法は何ですか?
[max | min] .txtのような名前パターンのリストファイルが欲しいので
ls [max|min].txt
、bashシェルで実行しますが、機能せず、次のエラーメッセージが表示されます
。ls:アクセスできません[max:そのようなファイルはありませんまたはディレクトリ
それで、この仕事をする正しい方法は何ですか?
角かっこは文字照合用で、縦棒はパイプ用です。ブレースの拡張を探しています。
ls {max,min}.txt
Bashにはextglob
、コマンドで有効にできるというシェルオプションがありますshopt -s extglob
。これにより、パターンフォーマットを使用できるようになります@(pattern-list)
。ここpattern-list
で、はパイプで区切られたパターンのリストです。[abc]
範囲式と同様に、ファイル名と一致し、ファイル名と一致しないパターンを除外します。Bashにも中括弧の展開がありますが、中括弧の展開はファイル名と一致しないか、ワイルドカードや範囲式のように展開されないため、これはあなたが求めているものではないようです。
$ shopt -s extglob
$ touch max.txt min.txt
$ echo @(max|min).txt
max.txt min.txt
$ echo @(min|mid|max).txt
max.txt min.txt
$ echo {min,mid,max}.txt
min.txt mid.txt max.txt
上記のコマンドのシーケンスについて注意すべき点がいくつかあります。
echo @(mid|min|max).txt
mid.txt
一致するファイルがないため、出力されません。echo @(min|mid|max).txt
ワイルドカード展開と同じ方法で、ソートする出力を並べ替えます。echo {min,mid,max}.txt
ブレース拡張であり、指定された順序ですべての要素を出力します。