このようなファイルが多すぎます。[a-zA-Z]+\d\.\d{2}\_\d.\d{4}.end
少なくとも4桁の古いファイルを見つけたいです.end
。 (衝突時にすべてのファイルが欲しい)
Bashを使ってこれを行うには?sort
明らかに、それだけでは事前編成順序のために動作しません。
ベストアンサー1
GNUツールを使用すると、次のことができます。
find . -regextype posix-extended \
-regex '.*/[a-zA-Z]+[0-9]\.[0-9]{2}_[0-9]\.[0-9]{4}\.end' -print0 |
awk -v RS='\0' -F . '
NR == 1 || $(NF-1) < min {files=$0; min = $(NF-1); next}
$(NF-1) == min {files = files "\n" $0}
END {if (NR) print files}'
以下は一般的なパターンの例です。一致するファイルのNULで区切られたリストを印刷し(NULはファイルパスには現れない唯一の文字であるため)、NULに設定されたレコード区切り文字を使用して出力を処理します(ただし、すべての実装がサポートされているわけではありませんawk
)。awk
これ)。
これフィールド区切り記号に設定されています.
。NF
はフィールド数で、$(NF-1)
最後のフィールドの前の最後のフィールドも同じです。awk
最後に、既知の値と比較して最小の数字を見つけ、そのファイルを files
awk
変数に保存します。
NUL区切りリストの代わりに改行区切りリストを保存するため、ユーザー出力にのみ使用されます。確実に後処理するには、NUL("\0"
awkで)を使用する必要があります。