我必须在子目录中找到最新版本的文件
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
答案 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列开始),然后按时间戳反转(以便最新版本出现)并打印每个文件名的第一个匹配项。