Shell
按修改日期排序文件,然後按名稱
讓我們假設一個目錄包含來自不同相機的圖片:
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
可能會失去文件的自然順序,這反映在名稱中。如何按修改時間對文件進行排序,同時按名稱對具有相同修改時間的文件進行排序?
通常,建議避免解析
ls
輸出。正如上面建議的 doneal24,stat
是一個更好的選擇。$ stat -c "%Y/%n" *.JPG | sort -t/ -k1,1n -k2 | sed 's@^.*/@@'
來自
man stat
:文件的有效格式序列(不帶 –file-system):
…
%n 文件名
%Y 上次數據修改的時間,自 Epoch 以來的秒數
所以
stat -c "%Y/%n" *.JPG
會以秒為單位為您提供時間戳和每個文件的名稱,以/
. 例如:1580845717/IMG5841.JPG
該命令的輸出通過管道傳輸到
sort -t/ -k1,1n -k2
,它首先按第一列、數字(時間戳)排序,然後按第二列排序。列由/
(-t/
) 分隔。最後,
sort
命令的輸出通過管道傳送到sed
,這將刪除所有字元,包括第一個字元/
(選擇的分隔符)。按您想要的順序顯示文件名列表中的結果(最後列出的“最新”文件)。