ls -l
的輸出意味着人類可讀,而不適合用於腳本。從我的機器
例子:
$ ls -l/
total 22
-rw-r--r--. 1 root root 0 Nov 7 17:41 1
lrwxrwxrwx. 1 root root 7 Feb 4 2016 bin -> usr/bin
dr-xr-xr-x. 6 root root 1024 Dec 27 11:20 boot
# ...
正如你可以看到,去年修改的項目得到了一年,而不是時間。當然,你可以添加更多的選項來解決這個問題,比如--time-style=+%Y-%m-%d %H:%M:%S %4Z"
,你可以得到2017-03-16 17:31:12 EET
。一旦你拋出了足夠的選項來使輸出可靠一些,你可以開始分析它,這取決於文件也可以證明更復雜。
也就是說,除非你被卡住ls
和for
循環出於某種原因,這將是更好地使用find
,它做了偉大的工作,在查找和顯示文件和目錄,他們的詳細資料,以及運行命令他們。
find /somePath/log.out* -printf "Date: %TY-%Tm-%Td - Time: %TT - File: %f\n" -exec tail -n5 {} \;
或許更好
find /somePath/ -maxdepth 1 -name "log.out*" -type f -printf "Date: %TY-%Tm-%Td - Time: %TT - File: %f\n" -exec tail -n5 {} \;
檢查man find
用於其選項的詳細信息,以及如何進一步格式化輸出(例如,日期和時間格式)。
還有一點需要注意:在Linux中通常沒有創建日期/時間這樣的事情。這些文件會存儲上次修改,更改和可能訪問的時間(如果已啓用文件系統)。以上命令使用修改時間。
偉大的解決方案。感謝名單。 – duke
如果這個答案對你有幫助,請接受它,以便將你的問題標記爲已解決。 – dgeorgiev
如何獲得按文件時間戳的年齡排序的此查找命令的輸出? – duke