特定の数値範囲内の奇数を含むすべてのファイルを一覧表示するには?

特定の数値範囲内の奇数を含むすべてのファイルを一覧表示するには?

「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~BAであるまさか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 braceexpand1、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ます。または、ユーティリティを使用してリストを印刷することもできます。lslsprintprintf

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}

おすすめ記事