将修改日期更改为文件名
Change modification date to filename
我有一些文件想更改 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$/./" <<< "") ""' _ {} \;
如 touch
手册页中所述,选项 -t
需要格式 [[CC]YY]MMDDhhmm[.ss]
。这就是 sed
命令的目的。
如果我理解的好,你想把文件名写成你自己的格式。这个脚本怎么样:
#!/bin/bash
suffix=".jpg"
for file in "IMG*"; do # Careful, the loop will break on whitespace
fileDate=$(echo $file| cut -d'_' -f 2)
year=${fileDate:0:4}
month=${fileDate:4:2}
day=${fileDate:6:2}
fileHour=$(echo $file| cut -d'_' -f 3 | sed -e s/$suffix//)
hour=${fileHour:0:2}
min=${fileHour:2:2}
secs=${fileHour:4:2}
newName="$year-$month-$day $hour:$min:$secs$suffix"
mv $file "$newName"
done
我有一些文件想更改 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$/./" <<< "") ""' _ {} \;
如 touch
手册页中所述,选项 -t
需要格式 [[CC]YY]MMDDhhmm[.ss]
。这就是 sed
命令的目的。
如果我理解的好,你想把文件名写成你自己的格式。这个脚本怎么样:
#!/bin/bash
suffix=".jpg"
for file in "IMG*"; do # Careful, the loop will break on whitespace
fileDate=$(echo $file| cut -d'_' -f 2)
year=${fileDate:0:4}
month=${fileDate:4:2}
day=${fileDate:6:2}
fileHour=$(echo $file| cut -d'_' -f 3 | sed -e s/$suffix//)
hour=${fileHour:0:2}
min=${fileHour:2:2}
secs=${fileHour:4:2}
newName="$year-$month-$day $hour:$min:$secs$suffix"
mv $file "$newName"
done