時間別ファイルの並べ替えの問題

時間別ファイルの並べ替えの問題

ファイルセット内のシーケンス間隔を識別する必要があります。シーケンスは 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がある場合は、printfmtimeを秒単位で印刷し、ファイル名を入力してを使用し、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を数値で出力するだけです。

おすすめ記事