ファイルセット内のシーケンス間隔を識別する必要があります。シーケンスは FILENAME_0001 から始まり、FILENAME_9999 で終了します。その後、シーケンスは0001から再開される。
適切なシーケンス確認のために、ls -rt を使用して修正時間順にファイルを選択し、以前のファイルシーケンス番号と比較します。前のファイルが9999の場合は、次のファイルが0001であることを確認してください(シーケンスリセットに対応するため)。
最近、ファイルが次の順序で一覧表示されるシナリオが発生しました。
FILENAME_0001
FILENAME_0002
FILENAME_0005
FILENAME_0003
FILENAME_0004
FILENAME_0006
FILENAME_0007
これは、ファイル3、4、5の変更時間(秒)が同じであるためです。ちょうどミリ秒が異なります。だから私はls -rtが秒だけを考慮すると思います。誰もが回避策を提案できますか?
ベストアンサー1
find
がある場合は、printf
mtimeを秒単位で印刷し、ファイル名を入力してを使用し、sort
最後に次を使用しますcut
。
find . -type f -printf "%T@\t%f\n" |
sort -k 1n -k 2 |
cut -f 2-
find は各行に TIMESTAMP FILENAME を出力します。ソートは、タイムスタンプを数字でソートすることから始まります。タイムスタンプが同じ場合は、最後の手段としてファイル名を使用してください。 Cutは出力からタイムスタンプを削除します。
編集:あなたのPerlソリューションはうまくいきますが、別の方法で行います。これは最も簡単です。
find . -type f -print |
perl -lne 'print (((stat($_))[9]."\t".$_)' |
sort -k 1n -k 2 |
cut -f 2-
時間を文字列に変換してから戻す必要はありません。 findのように、statのmtimeを数値で出力するだけです。