如何按上次更新日期(包括该文件夹的所有文件)列出父目录

时间:2014-02-04 22:06:59

标签: linux recursion find ls stat

我希望它以递归方式查看当前目录中的所有内容(/ data / trac),并仅列出父项(test,test2,project1)以及下一个目录中最新更新文件的时间戳它,并按时间戳排序。

以下是该方案:

$ pwd
$ /data/trac
$ ls -lht
drwxrwxr-x  9 www-data www-data 4.0K Apr 30  2012 test
drwxrwxr-x  9 www-data www-data 4.0K Apr 30  2013 test2
drwxrwxr-x  9 www-data www-data 4.0K Apr 30  2013 project1
$ cd test
$ ls -lht
drwxrwxr-x 2 www-data www-data 4.0K Feb  4 16:12 db
drwxrwxr-x 2 www-data www-data 4.0K Dec 13 13:16 conf
drwxrwxr-x 4 www-data www-data 4.0K Jan 11  2013 attachments
drwxrwxr-x 2 www-data www-data 4.0K Apr 30  2012 templates

我们有一个名为“test”的目录,最后更新于2012年4月30日。例如,在这种情况下,该目录中有一个db文件夹,其中包含一个文件,该文件已于2014年2月4日更新。我想使用此日期作为主要父文件夹“test”的时间戳。

我想要做的是只显示父文件夹(测试 test2 project1 )按上次更新日期排序(递归地)并显示最后更新的日期。

所以输出应该是:

$ awesome-list-command
 Feb  4  2014 test
 Feb  2  2014 test2

我已经在互联网上搜了几个小时试图找到这个,甚至弄乱自己也无济于事。我试过了:

find . -exec stat -f "%m" \{} \; | sort -n -r | head -1

find $1 -type f | xargs stat --format '%Y :%y %n' | sort -nr | cut -d: -f2- | head

find /some/dir -printf "%T+\n" | sort -nr | head -n 1

find /some/dir -printf "%TY-%Tm-%Td %TT\n" | sort -nr | head -n 1

stat --printf="%y %n\n" $(ls -tr $(find * -type f))

这些都没有奏效。

1 个答案:

答案 0 :(得分:2)

我的测试用例是这样的tree

$ tree -t .
.
├── test2
│   └── db
│       ├── foo
│       └── bar
└── test
    └── db
        ├── foo
        └── bar

foo是每个目录中的最新文件。

#/bin/bash
# awesome-list-command

for dir in */; do
    timestamp=$(find ./$dir -type f -printf "%T@ %t\\n" | sort -nr -k 1,2 | head -n 1)
    printf "%s %s\n" "$timestamp" "$dir"
done | sort -nr -k 1,2 | awk '{$1=""; print}'

输出:

$ ./awesome-list-command
 Tue Feb 4 23:29:41.0766864265 2014 test2/
 Tue Feb 4 23:29:40.0026788568 2014 test/

进行比较:

$ stat -c "%y" test*/db/foo
2014-02-04 23:29:41.766864265 +0100
2014-02-04 23:29:40.026788568 +0100
相关问题