如何更改linux下目录修改时间为目录下文件最大修改时间

in 网站优化 with 0 comment

最近在整理文件时需要这样一个工具,一个目录下有许多子目录和子文件,因为文件删除的原因,父目录的修改时间和子目录/文件的修改时间有较大出入,不便于统计,因而需要把父目录的修改时间修改为子项目最大修改时间

一点相关知识

stat命令

截屏2023-01-22 15.03.30 2.png

stat命令可以查看文件(夹)的信息,这里我们关注三个时间

Access: 最近一次访问文件的时间
Modify: 最近一次修改文件的时间
Change: 最近一次对文件属性改变的时间

touch命令

touch命令更改文件的访问和修改时间

其中 touch -r A B 命令,可以把B的访问和修改时间改为和A一致,即我们要使用的场景

编写脚本

基本原理是递归操作每一个目录,对目录下的子文件取修改时间最近的一个,并根据其时间修改目录的时间

#!/bin/bash

if [ ! -d "$1" ] ; then
  echo 'ERROR: Parameter missing. specify the folder!'
  exit
fi

function read_dir(){
  for file in `ls $1`
  do
    if [ -d $1"/"$file ]
    then
      read_dir $1"/"$file
    fi
  done
  file_ref=$(find $1 -mindepth 1 -maxdepth 1 -printf '%T+=%p\n' | sort |tail -n 1 | cut -d= -f2-)
  echo $1 $file_ref
  touch -r $file_ref $1
}

read_dir $1
vim ../modify-time.sh
...
./modify-time.sh sites

参考链接

https://unix.stackexchange.com/questions/1524/how-do-i-change-folder-timestamps-recursively-to-the-newest-file

上一篇: 2023春晚节目单
下一篇: 如何为甲骨文服务器(oracle)重置登录密码
Responses