linux - 将修改日期更改为文件名
问题描述
我有许多文件,我想在 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})。
我究竟做错了什么?
解决方案
如果要根据文件名设置文件时间戳,可以试试这个:
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
命令的目的。
推荐阅读
- c# - UIElement 返回空文本
- reactjs - 当onPress菜单反应原生时如何保存价值?
- c++ - asctime 格式的由来是什么?
- windows - 不保存崩溃转储/小型转储
- google-cloud-platform - 通过代理从 gke 连接到云 sql - 连接被拒绝
- wordpress - Wordpress 显示页面而不是没有 https 前缀的 404 错误
- pandas - pd.to_datetime 错误 ValueError: '-' is a bad directive
- vulkan - Vulkan 1.1、SPIR-V 1.3、libshaderc、验证层错误
- android - 从 StatusBarNotification 检索小图标作为位图
- java - 使用现有数据库在 Android 应用中显示数据