unix在子目录中找到最新版本的文件

时间:2013-11-21 13:35:12

标签: file unix find version

我必须在子目录中找到最新版本的文件

user1@host1:/tmp/pathtofind> find . -name "*.txt" -printf "%T+ %p\n"
2013-11-21+13:34:05.7255244000 ./20131119/abc.txt
2013-11-21+13:33:56.5965250740 ./20131120/abc.txt
2013-11-21+13:34:17.6735259520 ./20131118/abc.txt
2013-11-21+13:33:53.0055261810 ./20131121/abc.txt

我需要的是用于进一步处理的文件的最新版本的路径和文件名,在这种情况下它将是./20131118/abc.txt

你能帮我解决一下这个问题吗?

关心,vishal

修改

对不起我真正需要的是目录中每个不同文件名(abc.txt和def.txt)的最后一个版本:

user1@host1:/tmp/pathtofind$ find . -name "*.txt" -printf "%T+ %p\n"
2013-11-21+17:56:48.4251785260 ./20131121/abc.txt
2013-11-21+17:56:57.8651782010 ./20131121/def.txt
2013-11-21+17:56:37.6731789030 ./20131118/abc.txt
2013-11-21+17:57:14.2571776330 ./20131118/def.txt
2013-11-21+17:56:24.2011793670 ./20131119/abc.txt
2013-11-21+17:57:24.4011772720 ./20131119/def.txt
2013-11-21+17:56:29.1371791980 ./20131120/abc.txt
2013-11-21+17:57:19.6411774490 ./20131120/def.txt

user1@host1:/tmp/pathtofind$ find . -name "*.txt" -printf "%T+ %p\n" | sort | tail -1
2013-11-21+17:57:24.4011772720 ./20131119/def.txt

只能找到最新版本的文本文件。

在这种情况下我真正需要的是:

2013-11-21+17:56:48.4251785260 ./20131121/abc.txt
2013-11-21+17:57:24.4011772720 ./20131119/def.txt

问候,vishal

2 个答案:

答案 0 :(得分:1)

更改printf格式以发出自纪元以来的秒数并进行排序。话说:

find . -name "*.txt" -printf "%T@ %p\n" | sort | tail -1

会打印最新的文件。

   -printf format
          ...
                 @      seconds  since Jan. 1, 1970, 00:00 GMT, with frac‐
                        tional part.

答案 1 :(得分:0)

将上述输出传送到

sort -k1.43 -k1r|uniq -s42

- 按文件名排序(从第43列开始),然后按时间戳反转(以便最新版本出现)并打印每个文件名的第一个匹配项。