「file000.txt」から「file999.txt」までのファイルを含むデータセットがあります。
ワイルドカードを使用して、0から500までのすべてのファイルを一覧表示できることを知っています。
ls file{0..500}
奇数を含むすべてのファイルを見つけることができます
ls file*[1,3,5,7,9].txt
私はUnixを初めて使用するので、これら2つのパラメータを組み合わせて、0から500の範囲の奇数を含むすべてのファイルを1行にリストする方法がわかりません。私はこれが迅速な修正であることは間違いないと確信していますが、それを理解することはできません。
ベストアンサー1
そしてzsh
:
set -o extendedglob
print -rC1 -- file(<0-500>~^*[13579]).txt
(zsh から) は{0..50}
グローバル演算子ではなく、そのファイルが存在するかどうかを拡張する中括弧拡張です。
<0-500>
(zshに固有で、まだ他のシェルではコピーされていません)は、0から500までの数字を構成するASCII 10進数シーケンスに一致するglob演算子です。
~
~であるとは別に(まさか)演算子^
です。いいえ。A~B
AであるまさかBA~^B
はAですいいえB、だからAとB。
では、bash
次のことができます。
shopt -s failglob extglob
printf '%s\n' file*(0)[01234][0123456789][13579].txt
*(0)
(kshの拡張glob演算子)は、任意の数の0の場合、0から4までの数字、0から9までの数字、セット13579の数字を期待します。
中括弧拡張は、zshとbash(およびksh931とksh931)に対応するファイルがあるかどうかにかかわらず、yash -o braceexpand
1、3、... 499に拡張されます。
printf '%s\n' file{1..499..2}.txt
その他の注意事項:
[1,3,5,7,9]
と同じで、[13579,]
セット内のすべての文字と一致します。あなたは代わりに欲しいです[13579]
。- bash(zshではない)では、
[0-9]
数百の異なる数値類似文字を一致させるのが一般的です。[0123456789]
これらの10個のASCII 10進文字のみを一致させるには、このオプションを使用します。 -d
このオプションを渡さずにls
このオプションに渡されるすべてのファイルfilexxx.txt
(シェルの中かっこ拡張またはファイル名の生成(別名ワイルドカード)の結果)はタイプです。目次、ls
ディレクトリの内容を一覧表示します。ただし、ここではシェルから提供されたリストだけが並べ替えられて印刷されるため(ファイルが存在することを確認した後)、デフォルトでは重複し-d
ます。または、ユーティリティを使用してリストを印刷することもできます。ls
ls
print
printf
1 {a,b}
Braces拡張は70年代後半のcshで行われ、zshは90に{4..10}
前半年代を拡張しました(そしてksh93 AFAIKを使用しましたが、zshは最初からこれを行い、通常は別々のパディング演算子があります)。{a-zXYZ}
braceccl
{1..400..2%04d}
{1..400.2}
%04d
{0001..0400}