将最旧文件的日期(时间戳)从Linux中的目录存储在变量(shell脚本)中

时间:2014-08-03 21:10:02

标签: linux shell date

我正在尝试在/home/目录下找到最旧日志文件的日期至少10天。

find /home -type f –name "*.log" –mtime +10 -ls | sort | head - n 1 >>/home/text.txt  

我使用+10,因为我需要在10天后找到日期。

startDate = cut –d '_' –f20,22 text.txt to get the date.

但是此代码无法正常工作。有什么建议吗?

2 个答案:

答案 0 :(得分:1)

您可以尝试下一个:

oldest=$(stat -f "%m%t%Sm %N" /home/**/*.log | sort -n | head -1 | cut -f2)

oldest10=$(find /home/ -type f –name “*.log” –mtime +10 -print0 | xargs -0 stat -f "%m%t%Sm" | sort -n | head -1 | cut -f2)

说明:

  • find找到正确的文件
  • stat以“秒TAB日期”
  • 格式打印日期
  • sort按秒排序(数字) - 最低数字(秒)(所以它是最早的)
  • head获取第一行(最旧的)
  • cut删除秒字段。

如果您有GNU查找,则可以使用-printf获取“秒TAB日期”,而不需要使用xargsstat命令,例如:

find arguments -printf "%T@\t%c\n" | sort -n | head -1 | cut -f2

答案 1 :(得分:0)

您希望使用find来查找/ home /目录下10天以上最旧的日志文件。如果这是您的目标,那么您可以使用类似于以下的find命令:

find /home -type f -name "*.log" -mtime +10 -printf "%TY%Tm%Td%TH%TM%TS %p\n" | \
sort | head -n 1 >> /home/text.txt

head命令之前的输出将是按升序排列的文件列表,如下所示(以“* .c”模式显示):

20140621130603.9932529560 ./fill8bit.c
20140623130713.1503117800 ./strtol2.c
20140623133243.9487796380 ./strtol1.c
20140623215536.9085778830 ./mpg.c
...

头部-n1只取第一个。那就是:

20140621130603.9932529560 ./fill8bit.c