首页 文章

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

提问于
浏览
1

我希望它以递归方式查看当前目录(/ 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”的时间戳 .

我想要做的是只显示父文件夹( testtest2project1 )按上次更新日期(递归)对它们进行排序,并显示上次更新的日期 .

所以输出应该是:

$ 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 回答

  • 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
    

相关问题