Windows 更新根文件夹的修改时间

简介:
Win10 系统不会根据深层目录文件更新主目录的修改时间.
一般解决办法是关闭 Winodws 搜索引擎。

win10文件夹不能自动更新了怎么办?_百度知道

本脚本通过递归遍历子目录和子文件,来更新根目录的时间。
使用内层目录和当前目录下的最新文件的修改时间,更新根目录的修改时间。

#! /bin/bash
# 版本:
# bash  --version: GNU bash,版本 4.4.12(3)-release-(x86_64-unknown-cygwin)
# ls    --version: ls (GNU coreutils) 9.0
# touch --version: touch (GNU coreutils) 9.0
#
# 作者:
# blog.csdn.net/tiandyoin 2022.10.18
#
# 简介:
# Win10 系统不会根据深层目录文件更新主目录的修改时间.
# 一般解决办法是关闭 Winodws 搜索索引。
# https://zhidao.baidu.com/question/1970249248433264740.html
# 本脚本通过递归遍历子文件,来更新根目录的时间。
# 使用内层目录和当前目录下的最新文件的修改时间,更新主目录的修改时间。
# Usage:
# [./]update_dir_time[.sh] -h
# [./]update_dir_time[.sh] [-q]  .
# [./]update_dir_time[.sh] [-qs] ./
# [./]update_dir_time[.sh] [-sv] ../
# [./]update_dir_time[.sh] [-st] .\\
# [./]update_dir_time[.sh] [-stv] /usr/bin/
# [./]update_dir_time[.sh] [-stv] "/usr/bin/tiandyoin text dir - 副本"
# [./]update_dir_time[.sh] [-stv] C:\\Cygwin64\\bin\\tiandyoin text dir - 副本\\
# [./]update_dir_time[.sh] [-stv] "C:\Cygwin64\bin\tiandyoin text dir - 副本"
# [./]update_dir_time[.sh] [-stv] "C:\Cygwin64\bin\tiandyoin text dir - 副本\\"
#
# -h 查看帮助
# -q 安静模式,不输出任何消息。
# -s 安全模式,当父目录时间比子目录或子文件晚时,不更新父目录时间。
# -t 统计各函数的执行时间
# -v 输出详细的文件遍历信息
#
# 备注:
# 不比较时间,如果子级文件的修改时间 与 当前父级目录的修改时间相同,仍会覆盖父级修改时间。
# 更改文件名,不会改变文件的修改时间,但会改变当前父级目录的修改时间。
# update_dir:   会把当前父级目录的修改时间 回退为 更名文件的修改时间。
# update_dir_s: 如果当前父级目录的修改时间 大等于 内层内容的修改时间,则保持父级修改时间。
#
# FAQ:
# 1.总用时      35s(27个文件,20个目录)
#   正常处理    18s(包括touch)
#   打印处理    17s
#   touch       5s
# 2.为什么使用"Break 2"无效? ---
# 3.很多地方要判断文件或目录是否合法?
#   Hacker 可能创建空字符(空格、制表符、换页符等)文件或目录,会造成程序死循环。
# 4.以下两种方式都无法阻止 touch 失败时强制退出
#   command || true
#   if a command exits with a non-zero status, ignore that and continue.
# 5.$IFS Shell预置变量
#   字符串分隔符,识别字符串或单词边界,默认值是空格,脚本中根据需要可以修改此变量的值。
#
set +efunction update_dir_main()
{# 获取参数get_opt $*# 转换路径case "`uname`" in CYGWIN*)MAIN_DIR=`cygpath -U "$MAIN_DIR"`;;esac[[ $MODE_QUIET == 0 ]] && echo -e "________________________________________________________________________________"[[ $MODE_QUIET == 0 ]] && echo -e "FUNC=$FUNC \nMAIN_DIR=\"$MAIN_DIR\" \nDealing..."[[ $MODE_VERBOSE == 1 ]] && printf "\n[ T K C ]: TraveL, Keep, Change.\n\n"start_time 'update_dir_main()'# 调用主体update_dir $MAIN_DIRend_time 'update_dir_main()'[[ $MODE_VERBOSE == 1 ]] && printf "\n[ T K C ]: TraveL, Keep, Change.\n\n"# 打印非法路径print_invalid_list# 统计 目录 和 文件 总个数print_total_files $MAIN_DIR# 打印各流程总时间print_time_spans[[ $MODE_QUIET == 0 ]] && echo -e "\nDone!"return 0
}function update_dir()
{LEVEL=`expr $LEVEL + 1`start_time 'Folder Expand'local dir="$*"[[ $MODE_VERBOSE == 1 ]] && printf "[ T     ]: " && print_info "$dir" || true# 务必把目录排在最前面,递归优先处理叶子层目录。# 每个路径一行,按时间倒序,最新的最前。# read 命令在读取数据时会把 \t 替换成空格,以及行末尾的 \t 舍弃,其它无法识别的字符也丢弃。## ls -1tA --indicator-style=none --group-directories-first "$dir" | \#   while read fdlocal OLDIFS="$IFS"IFS=$'\n'for fd in `ls -1taA --indicator-style=none --group-directories-first "$dir"`doinvalid "$dir" "$fd"; [[ $? -ne 0 ]] && continueif [ -d "$dir/$fd" ]thenupdate_dir "$dir/$fd" || truefidoneIFS="$OLDIFS"end_time 'Folder Expand'start_time 'Folder Collapse'# 按间倒序,重新排序当前目录,用目录下内容的最新修改时间更新当前目录。# update_dir   => ls -1tA# update_dir_s => ls -1ta     (会出现 ".", ".." 目录)## ls -1tA --indicator-style=none "$dir" | \#   while read fdlocal OLDIFS="$IFS"IFS=$'\n'for fd in `ls $LS_OPTION --indicator-style=none "$dir"`doinvalid "$dir" "$fd"; [[ $? -ne 0 ]] && continueif [[ "$fd" == "." || "$fd" == ".." ]]      # 当前目录或上级目录最新,不用修改then[[ $MODE_VERBOSE == 1 ]] && printf "[   K   ]: " && print_info "$dir/$fd" || trueelsestart_time 'touch()'touch -mr "$dir/$fd" "$dir" || trueend_time 'touch()'[[ $MODE_VERBOSE == 1 ]] && printf "[     C ]: " && print_info "$dir/$fd" || truefibreakdoneIFS="$OLDIFS"end_time 'Folder Collapse'LEVEL=`expr $LEVEL - 1`return 0
}function get_opt()
{MODE_QUIET=0MODE_STAT_TIME=0MODE_VERBOSE=0MAIN_DIR=LEVEL=0FUNC=update_dirLS_OPTION="-1tA"__SPACE_REPLACER__='?'        # 用 '?' 替换 空字符,以便存入 TIME_SPAN_LISTdeclare -Ag INVALID_LIST      # -g 全局变量。-a 顺序数组;-A 关联数组,类似 C++ Map.declare -Ag TIME_SPAN_LISTdeclare -Ag TIME_START_LISTdeclare -Ag TIME_END_LISTwhile getopts ":hqstv" opt; docase ${opt} inh )echo "Usage:"echo "  update_dir_time [options] [dir]"echo ""echo "General Options:"echo "  -h    show help."echo "  -q    suppress all normal output."echo "  -s    safe mode, reserve parent directory's update-time when it's latest."echo "  -t    statistics time of some modules."echo "  -v    verbosely list files processed."exit 0;;q )MODE_QUIET=1MODE_VERBOSE=0MODE_STAT_TIME=0;;s )FUNC=update_dir_sLS_OPTION="-1ta";;t )MODE_STAT_TIME=1MODE_QUIET=0;;v )MODE_VERBOSE=1MODE_QUIET=0;;\? )echo "Invalid Option: -$OPTARG" 1>&2exit 1;;: )echo "Miss Option Argument: -$OPTARG requires an argument" 1>&2exit 2;;esacdoneshift $((OPTIND -1))  # remove optionsMAIN_DIR="$*"[[ -z "$MAIN_DIR" || ! ( -e "$MAIN_DIR" ) ]] && echo -e "Path not found!\nType 'update_dir_time -h' for help." && exit 1return 0
}function invalid()
{local dir="$1"local file="$2"if [[ -z "$file" || ! ( -e "$dir/$file" ) ]]thenif [[ ! -z "$file" && "$file" != "." && "$file" != ".." ]]then# collect invalid listecho "LINENO=$LINENO invalid $dir/$file"local level_time_dir=`get_time_path "$dir/$file"` || truelocal level_time_dir_ind=echo "$level_time_dir" | tr "[:space:]" "$__SPACE_REPLACER__"INVALID_LIST["$level_time_dir_ind"]="$level_time_dir"fireturn 1fireturn 0
}function get_time_path()
{local fd="$*"[[ -e "$fd" ]] && fd=$(realpath -es "$fd")[[ -d "$fd" ]] && fd="$fd/"local time_path=`ls -ldQ --indicator-style=none --time-style="+///%Y-%m-%d %H:%M:%S///" "$fd" | awk -F"///" '{print $2,$3}'` || truelocal level_time_dir=$(printf "%s %3d: %s\n" Level $LEVEL "$time_path")echo "$level_time_dir"
}function print_info()
{if [ $MODE_VERBOSE == 1 ]thenlocal level_time_dir=`get_time_path "$*"`printf "$level_time_dir\n"fireturn 0
}function print_total_files()
{if [ $MODE_QUIET == 0 ]thenlocal dir="$*"# 递归统计指定目录下的文件数(包括子层)local total_dirs=`ls -AlR "$dir" | grep "^-" | wc -l`# 递归统计指定目录下的目录(文件夹)数(包括子层)local total_files=`ls -AlR "$dir" | grep "^d" | wc -l`printf "\nDealed Totals : %5d\n       DIRs   : %5d\n       Files  : %5d\n" \$(($total_dirs + $total_files)) $total_dirs $total_filesfireturn 0
}function print_invalid_list()
{if [ $MODE_VERBOSE == 1 ]thenecho -e "\nInvalid paths as follow:"echo "${INVALID_LIST[@]}"fireturn 0
}function start_time()
{if [ $MODE_STAT_TIME == 1 ]thenlocal key=`echo -e "$@"`key=`echo -e "$key"|tr "[:space:]" "$__SPACE_REPLACER__"`# echo "start_time key=\"$key\""# TIME_START_LIST[$key]=$(date +%s)TIME_START_LIST[$key]=$[$(date +%s%N)/1000000]fireturn 0
}function end_time()
{if [ $MODE_STAT_TIME == 1 ]thenlocal key=`echo -e "$@"`key=`echo -e "$key"|tr "[:space:]" "$__SPACE_REPLACER__"`# echo "  end_time key=\"$key\""# TIME_END_LIST[$key]=$(date +%s)TIME_END_LIST[$key]=$[$(date +%s%N)/1000000]local time_span=$[ ${TIME_END_LIST[$key]} - ${TIME_START_LIST[$key]} ]TIME_SPAN_LIST[$key]=$(( ${TIME_SPAN_LIST[$key]} + $time_span ))fireturn 0
}function print_time_spans()
{if [ $MODE_STAT_TIME == 1 ]thenlocal key=`echo -e "update_dir_main()"|tr "[:space:]" "$__SPACE_REPLACER__"`printf "\nTime Span %-18s: %6.1f sec\n" "Totals" `awk 'BEGIN{printf "%.2f\n",'${TIME_SPAN_LIST["$key"]}'/'1000.0'}'`for key in ${!TIME_SPAN_LIST[*]}dolocal org_key=`echo -e "$key" | tr "$__SPACE_REPLACER__" " "`printf "          %-18s: %6.1f sec\n" "$org_key" `awk 'BEGIN{printf "%.2f\n",'${TIME_SPAN_LIST["$key"]}'/'1000.0'}'`donefireturn 0
}# 全局主函数调用
update_dir_main $*

测试图例:

Windows 安装 Cygwin 或 Linux Shell 里输入:

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/24373.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【微信小程序】uni-app 配置网络请求

原因 由于平台的限制,小程序项目中 不支持axios,而且原生的,wx.request()API功能较为简单,不支持拦截器等全局定制的功能。因此,建议在uni-app项目中使用 escook/request-miniprogram 第三方包发起网络数据请求。 步…

Go go-redis应用

go-redis 是 Go 语言的一个流行的 Redis 客户端库,它提供了丰富的功能来与 Redis 数据库进行交互。 1、简单应用 package mainimport ("context""fmt""log""github.com/redis/go-redis/v9" )func main() {ctx : context…

接口幂等性设计(5 大方案罗列)

结合案例、列举场景的接口幂等性设计方案。 方案 1. 状态机 业务场景,数据审核成功后进行短信通知,或者是订单状态变成已支付后,短信通知用户订单生成的详细信息,等等和状态有关的操作。 假设 status:0(待…

Python实战:计算向量夹角及相关系数

在Python中,我们可以使用NumPy库来计算向量之间的夹角(通常是它们之间的余弦相似度)以及皮尔逊相关系数(Pearson correlation coefficient)。下面是一个Python脚本,展示了如何执行这些计算。 首先&#xf…

查看服务器的硬件信息、操作系统等常用命令

在Linux下查看服务器是什么类型的服务器,通常可以通过查看服务器的硬件信息、操作系统和已安装的服务来判断。以下是一些常用的命令: 查看操作系统信息: cat /etc/*release* 查看CPU信息: lscpu 查看内存信息: free…

在npm发布自己的组件包

目录 前言 正文 npm和git的对比 Node环境的配置 具体发布步骤 ※※需要注意的是 尾声 🔭 Hi,I’m Pleasure1234🌱 I’m currently learning Vue.js,SpringBoot,Computer Security and so on.👯 I’m studying in University of Nottingham Ni…

轻松掌握Java循环:break、continue和return语句全解析

哈喽,各位小伙伴们,你们好呀,我是喵手。运营社区:C站/掘金/腾讯云;欢迎大家常来逛逛 今天我要给大家分享一些自己日常学习到的一些知识点,并以文字的形式跟大家一起交流,互相学习,一…

【iOS】MRC下的单例模式批量创建单例

单例模式的介绍和ARC下的单例请见这篇:【iOS】单例模式 目录 关闭ARC环境MRC下的单例ARC下的单例批量创建单例Demo 关闭ARC环境 首先关闭ARC环境,即打开MRC: 或是指定某特定目标文件为非ARC环境: 双击某个类文件,指定…

ERROR: cannot launch node of type [usb_cam/usb_cam_node]: usb_cam

sudo apt install ros-noetic-usb-cam 一般情况下之间下载就可以解决,如果显示无法定位到该文件 可以参考E: Unable to locate package ros-kinetic-usb-cam-CSDN博客 如果最后发现以下指令还是没办法运行那就是版本问题。 rqt_image_view 避雷!&am…

「前端+鸿蒙」核心技术HTML5+CSS3(十一)

1、CSS3 简介 CSS3 是层叠样式表的最新标准,它引入了许多新特性来增强网页的表现力。CSS3 不仅增强了现有CSS属性的功能,还引入了新的布局方式、动画、渐变、阴影、边框效果等。 2、CSS3 长度单位 CSS3 引入了一些新的单位,包括但不限于: vw(视口宽度的百分比)vh(视口…

使用Colaboratory免费GPU资源微调Llama3-8b

Llama3微调过程 准备工作 Google Colaboratory Google Colaboratory,也称为 Colab,是一个基于云的平台,允许用户编写和执行 Python 代码。 它为机器学习和数据分析任务提供了便利的环境,并内置了对 TensorFlow 等流行库的支持。…

【推荐系统】CTR模型加了特征,用少量数据训test-AUC涨了,用大量数据训test-AUC跌了很多

先打印出train-AUC 加了特征 —> 如果train-AUC涨了 可以把测试集改为训练集,这样之后 如果test-AUC也涨了,说明测试代码是正常的,是模型过拟合 —> 减少MLP参数量 如果test-AUC还是跌了,说明测试代码有错,和…

pytorch使用DataParallel并行化保存和加载模型(单卡、多卡各种情况讲解)

话不多说,直接进入正题。 !!!不过要注意一点,本文保存模型采用的都是只保存模型参数的情况,而不是保存整个模型的情况。一定要看清楚再用啊! 1 单卡训练,单卡加载 #保存模型 torc…

!力扣70. 爬楼梯

假设你正在爬楼梯。需要 n 阶你才能到达楼顶。每次你可以爬 1 或 2 个台阶。你有多少种不同的方法可以爬到楼顶呢? 1. 递归(超时) class Solution { public:int climbStairs(int n) {if(n1){return 1;}if(n2){return 2;}return climbStairs…

ARCGIS 几种SHP融合、拼接等方法

常用的工具可在Geoprocessing里面找到: Merge 使用该工具可将多个源中的数据集合并到新的单个输出数据集。所有输入数据集的类型必须相同。例如,点要素类之间可以合并,表之间也可以合并,但线要素类却无法同面要素类合并。 注意&…

1.vue2.x-初识及环境搭建

目录 1.下载nodejs v16.x 2.设置淘宝镜像源 3.安装脚手架 4.创建一个项目 5.项目修改 代码地址:source-code: 源码笔记 1.下载nodejs v16.x 下载地址:Node.js — Download Node.js 2.设置淘宝镜像源 npm config set registry https://registry.…

【c语言】指针就该这么学(3)

🌟🌟作者主页:ephemerals__ 🌟🌟所属专栏:C语言 目录 一、函数指针 1.函数指针变量的创建 2.函数指针变量的使用 二、typedef关键字 三、函数指针数组 1.函数指针数组的概念 2.函数指针数…

$nextTick的使用场景介绍

$nextTick使用 Vue更新DOM-异步的 目标: 点击count, 马上通过"原生DOM"拿标签内容, 无法拿到新值 components/Move.vue - 继续新增第三套代码 <template><div><p>1. 获取原生DOM元素</p><h1 id"h" ref"myH">我是…

从零开始实现自己的串口调试助手(8)-循环发送

循环发送 准备 创建槽函数 设置QSpinBox的最大值 注意&#xff1a; // 我们不能在qt的ui线程中延时&#xff0c;否则将导致页面刷新问题 //QThread::msleep(ui->spinBox->text().toInt());//设置下次发送时间间隔 定时器实现 关联信号与槽: //添加自动换行定…

centos中sudo: apt: command not found

系统找不到apt这个命令。CentOS中应该使用sudo yum或sudo dnf&#xff08;CentOS 8及以后版本&#xff09;来执行包管理操作。不建议安装使用apt&#xff0c;可能会破坏系统的稳定性和兼容性。建议使用sudo yum install package_name来安装软件包。