次の一連のファイルがあります。
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 nullglob
bashのオプションを有効にします。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