如何将文件夹的修改日期更改为内部最后更改的文件?

rub*_*o77 5 filesystems ubuntu ext4 timestamps files

在我的媒体中心目录中,我的文件夹的所有修改时间都不是所需的日期。

如何将主文件夹的所有修改时间更改为每个文件夹内最新媒体文件的修改时间?

例如:

cd /tmp
mkdir test
cd test
mkdir d1
mkdir d2
touch d1/text1.txt
touch d1/movie1.mov
touch d2/text2.txt
touch d2/movie2.mov
touch notthis.file
Run Code Online (Sandbox Code Playgroud)

现在我试过:

ls -td *| head -n 1
Run Code Online (Sandbox Code Playgroud)

但这给出了:

notthis.file
Run Code Online (Sandbox Code Playgroud)

Sté*_*las 5

zsh

cd that-dir &&
  touch -r *(D.om[1]) .
Run Code Online (Sandbox Code Playgroud)

如果您还想考虑子目录中的文件:

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

如果您想对每个非空目录递归地执行此操作:

for d (**/*(DFod)) touch -r $d/*(D.om[1]) -- $d
Run Code Online (Sandbox Code Playgroud)

请注意,如果存在没有常规文件的非空目录(如果它们包含的所有文件都是非常规的,例如目录、符号链接、fifos...),您将收到“未找到匹配项”错误。为了避免这种情况,您可以将其更改为:

for d (**/*(DFod)) {
  newest=($d/*(ND.om[1]))
  (( $#newest )) && touch -r $newest -- $d
}
Run Code Online (Sandbox Code Playgroud)

.如果您不想限制为常规文件,请删除glob 限定符;-如果您还想考虑常规文件的符号链接(以及它们指向的文件的修改时间),请删除 glob 限定符;或者对于^/非目录文件替换为,或^/,F除空目录(非目录或F空目录)之外的任何类型的文件。


Flu*_*lup 3

您可以使用以下怪物将目录your_dir的时间戳设置为其最近修改的文件的时间戳:

touch -t `ls -ltr --time-style='+%Y%m%d%H%M.%S your_dir' | grep '^-' | tail -1 | awk '{print $6}'` your_dir
Run Code Online (Sandbox Code Playgroud)

目前尚不清楚“主文件夹”是什么意思,所以我没有包含任何递归。