我希望它以递归方式查看当前目录中的所有内容(/ 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))
这些都没有奏效。
答案 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