如何以递归方式将文件夹时间戳更改为最新文件?

Mon*_*h32 20 shell directory timestamps touch

我想知道是否有人知道如何根据在该文件夹中找到的文件的最新时间戳递归地更改文件夹的时间戳。

例如:

jon@UbuntuPanther:/media/media/MP3s/Foo Fighters/(1997-05-20) 颜色和形状$ ls -alF
总计 55220
drwxr-xr-x 2 jon jon 4096 2010-08-30 12:34 ./
drwxr-xr-x 11 jon jon 4096 2010-08-30 12:34 ../
-rw-r--r-- 1 jon jon 1694044 2010-04-18 00:51 Foo Fighters - Doll.mp3
-rw-r--r-- 1 jon jon 3151170 2010-04-18 00:51 Foo Fighters - 足够的空间.mp3
-rw-r--r-- 1 jon jon 5004289 2010-04-18 00:52 Foo Fighters - Everlong.mp3
-rw-r--r-- 1 jon jon 5803125 2010-04-18 00:51 Foo Fighters - 二月 Stars.mp3
-rw-r--r-- 1 jon jon 4994903 2010-04-18 00:51 Foo Fighters - 嘿,约翰尼公园!.mp3
-rw-r--r-- 1 jon jon 4649556 2010-04-18 00:52 Foo Fighters - Monkey Wrench.mp3
-rw-r--r-- 1 jon jon 5216923 2010-04-18 00:51 Foo Fighters - 我的英雄.mp3
-rw-r--r-- 1 jon jon 4294291 2010-04-18 00:52 Foo Fighters - 我可怜的大脑.mp3
-rw-r--r-- 1 jon jon 6778011 2010-04-18 00:52 Foo Fighters - New Way Home.mp3
-rw-r--r-- 1 jon jon 2956287 2010-04-18 00:51 Foo Fighters - See You.mp3
-rw-r--r-- 1 jon jon 2730072 2010-04-18 00:51 Foo Fighters - Up in Arms.mp3
-rw-r--r-- 1 jon jon 6086821 2010-04-18 00:51 Foo Fighters - 追着你走.mp3
-rw-r--r-- 1 jon jon 3033660 2010-04-18 00:52 Foo Fighters - Wind Up.mp3

文件夹“(1997-05-20) The Color and The Shape”的时间戳将设置为 2010-04-18 00:52。

Gil*_*il' 23

您可以使用touch -r另一个文件的时间戳而不是当前时间(或touch --reference=FILE

这里有两个解决方案。在每个解决方案中,第一个命令将目录的修改时间更改为紧邻其下的最新文件的修改时间,第二个命令递归查看整个目录树。cd '.../(1997-05-20) The Colour and The Shape'在运行任何命令之前切换到目录 ( )。

在 zsh 中(删除D忽略点文件):

touch -r *(Dom[1]) .
touch -r **/*(Dom[1]) .
Run Code Online (Sandbox Code Playgroud)

在 Linux 上(或更普遍地使用 GNU find):

touch -r "$(find -mindepth 1 -maxdepth 1 -printf '%T+=%p\n' |
            sort |tail -n 1 | cut -d= -f2-)" .
touch -r "$(find -mindepth 1 -printf '%T+=%p\n' |
            sort |tail -n 1 | cut -d= -f2-)" .
Run Code Online (Sandbox Code Playgroud)

但是请注意,那些假设文件名中没有换行符。


小智 9

如果要将当前目录及其子目录中的所有时间戳更新为当前时间

find . -exec touch {} \;
Run Code Online (Sandbox Code Playgroud)