unix在文件名中按日期查找目录中的最旧文件

时间:2015-04-08 23:08:52

标签: unix

我试图通过查看文件名中的日期来查找目录中最旧的文件。

文件示例:

AA_20150408010101.txt
AA_AA_20150408020202.txt
BB_20150408030303.txt

我尝试了很多命令,但下面的命令是最接近所需结果的命令:

ls -lr | head -1

2 个答案:

答案 0 :(得分:2)

试试这个:

ls -1 | sed 's/^\([^0-9]*\)\([0-9]\+\.txt\)/\2\1/g' | sort -n | head -1 | sed 's/^\([0-9]\+\.txt\)\(.*\)/\2\1/g'

此命令执行下一步:

  1. 在当前目录中打印文件列表
  2. 在文件名末尾的文件名中移动前缀
  3. 以数字方式对文件进行排序(因为文件名现在从时间戳开始)
  4. 仅保留带有最早时间戳的文件。
  5. 移回前缀。
  6. 虽然文件名中的时间戳看起来有点奇怪:你已经在文件inode中有时间戳,你可以使用stat命令看到,所以为什么在文件名中使用额外的时间戳呢?我只能看到一个案例:如果文件修改时间被人为改变(例如使用touch命令)。

答案 1 :(得分:0)

将文件名删除到简单日期,搜索第一个日期并查看文件是什么。

ls *$(ls | sed -e 's/.*_//' -e 's/.txt//' | sort -n | head -1).txt | head -1