Bashで一連のファイルFile.Number。

Bashで一連のファイルFile.Number。

次の一連のファイルがあります。

File.Number.{1..10}.txt

私はその中に存在するファイルの配列やシーケンスを取得したいと思います。退屈なアプローチは、すべての項目を繰り返し配列に追加することです。どのファイルが存在しないかを知らせるか、ファイル番号を抽出できる行があるかどうか疑問に思います。

ベストアンサー1

(あなたの質問に、ある場所では「存在するファイル」と呼ばれ、他の場所では「存在しないファイル」となっていて、どちらを望むのかよくわかりません。)

それらを得るためにするある場合は、Bashで拡張グローブを使用できます。

$ shopt -s nullglob
$ echo File.Number.@([1-9]|10).txt
File.Number.10.txt File.Number.1.txt File.Number.7.txt File.Number.9.txt

globに一致するファイルがない場合は、何も返されないようにshopt -s nullglobbashのオプションを有効にします。nullglobこれがなければ、一致がない glob はそれ自体で拡張されます。

あるいは、より簡単には、Zshの数値範囲は次のようになります。

% echo File.Number.<1-10>.txt
File.Number.10.txt File.Number.1.txt File.Number.7.txt File.Number.9.txt

屋根ふきもそれほど悪くなく、必要なファイルを見つけるのに役立ちます。欲しくないglobよりも存在する方が良いです。

$ a=(); for f in File.Number.{1..10}.txt; do [ -f "$f" ] || a+=("$f"); done
$ echo "these ${#a[@]} files didn't exist: ${a[@]}"
these 6 files didn't exist: File.Number.2.txt File.Number.3.txt File.Number.4.txt File.Number.5.txt File.Number.6.txt File.Number.8.txt

おすすめ記事