さまざまなカメラの画像を含むディレクトリを考えてみましょう。
DCIM1234.JPG
DCIM1235.JPG
DCIM1236.JPG
DSCN4120.JPG
DSCN4121.JPG
DSCN4122.JPG
DSCN4123.JPG
IMG5840.JPG
IMG5841.JPG
IMG5842.JPG
IMG5843.JPG
これらの個々のカメラのすべてのファイルは、を使用して変更日ごとに簡単に並べ替えることができますls -t
。問題は、ほとんどのファイルシステムの精度が1秒以上であるため、連続撮影時と同様に、一部の写真のタイムスタンプが同じであることです。この場合、ls -t
ファイルの自然な順序が失われ、名前に反映される可能性があります。
変更時間ごとにファイルを並べ替えると同時に、変更時間が同じファイルを名前で並べ替えるには?
ベストアンサー1
ls
通常、出力を解析しないことをお勧めします。上記のdidal24で提案したように、stat
より良いオプションです。
$ stat -c "%Y/%n" *.JPG | sort -t/ -k1,1n -k2 | sed 's@^.*/@@'
からman stat
:
ファイルの有効なフォーマット順序(--file-systemを除く):
...
%n filename
%Y最後のデータ変更時刻、エポック以降
したがって、stat -c "%Y/%n" *.JPG
秒単位のタイムスタンプで始まる各ファイルの名前が提供されます/
。
1580845717/IMG5841.JPG
このコマンドの出力はにパイプされ、sort -t/ -k1,1n -k2
最初の列に基づいてソートされ、次に数字(タイムスタンプ)、2番目の列に基づいてソートされます。列は/
()で区切られています-t/
。
最後に、コマンドの出力sort
がにパイプされ、sed
最初の文字(選択された区切り文字)まですべての文字が削除されます。/
結果は、目的の順序(最後にリストされている「最新」ファイル)でファイル名のリストに表示されます。