2017-03-15 21 views
0

我有幾個日誌文件的時間戳不同。我想用時間戳和最後幾行回顯文件名(參見示例)。如何從循環內的ls -l中提取日期,時間和文件名?

我該如何引用日期和時間以及文件名?

#!/bin/bash 
for file in $(ls -l /somePath/log.out*) 
do 
    echo -e "Date: $creationDate - Time: $creationTime - File: `basename ${file}`" 
    echo -e "`tail -n5 $file`" 
done 

回答

1

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。一旦你拋出了足夠的選項來使輸出可靠一些,你可以開始分析它,這取決於文件也可以證明更復雜。

也就是說,除非你被卡住lsfor循環出於某種原因,這將是更好地使用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中通常沒有創建日期/時間這樣的事情。這些文件會存儲上次修改,更改和可能訪問的時間(如果已啓用文件系統)。以上命令使用修改時間。

+0

偉大的解決方案。感謝名單。 – duke

+0

如果這個答案對你有幫助,請接受它,以便將你的問題標記爲已解決。 – dgeorgiev

+0

如何獲得按文件時間戳的年齡排序的此查找命令的輸出? – duke

相關問題