首页 > 解决方案 > 将修改日期更改为文件名

问题描述

我有许多文件,我想在 linux 中更改修改日期。修改日期保存在文件名中。

所以我有文件,其名称例如“IMG_20180101_010101.jpg”,但修改日期是今天。我想将修改日期更改为 2018-01-01 01:01:01,如文件名所示。我尝试过查找和触摸:

find . -iname 'IMG*' -print | while read filename; do touch -t {filename:7:8} "$filename"; done

当我这样做时,我总是得到一个错误(“无效的日期格式:{filename:7:8})。

我究竟做错了什么?

标签: linuxbashtouch

解决方案


如果要根据文件名设置文件时间戳,可以试试这个:

find -type f -name "IMG_*" -exec bash -c 'touch -t $(sed "s/.*IMG_\([0-9]\{8\}\)_\([0-9]\{4\}\)\([0-9]\{2\}\).jpg$/\1\2.\3/" <<< "$1") "$1"' _ {} \;

正如touch手册页中提到的,该选项-t需要一个 format [[CC]YY]MMDDhhmm[.ss]。这就是sed命令的目的。


推荐阅读