大家早上好,
我想为一个网站中的文件(图片)在一个文件夹中重新命名,由"1.jpg, 2.jpg, 3.jpg ..."变为"yyyymmdd_hhmmss.jpg"——所以我想读取创建时间并将这些时间作为图片的名称。有没有人知道如何使用Linux shell或ImageMagick来实现?
谢谢!
大家早上好,
我想为一个网站中的文件(图片)在一个文件夹中重新命名,由"1.jpg, 2.jpg, 3.jpg ..."变为"yyyymmdd_hhmmss.jpg"——所以我想读取创建时间并将这些时间作为图片的名称。有没有人知道如何使用Linux shell或ImageMagick来实现?
谢谢!
在Linux shell中:
for f in *.jpg
do
mv -n "$f" "$(date -r "$f" +"%Y%m%d_%H%M%S").jpg"
done
说明:
for f in *.jpg
do
这启动了对所有jpeg文件的循环。 其特点是它将适用于所有文件名,即使文件名中有空格、制表符或其他困难字符。
mv -n "$f" "$(date -r "$f" +"%Y%m%d_%H%M%S").jpg"
这将重命名文件。 它使用-r
选项告诉date
显示文件的日期而不是当前日期。 规范+"%Y%m%d_%H%M%S"
告诉date
按您指定的格式进行格式化。
文件名$f
在使用时放置在双引号中。 这确保奇怪的文件名不会导致错误。
-n
选项告诉mv
永远不要覆盖现有文件。
done
这完成了循环。
对于交互式使用,您可能更喜欢命令都在一行中。 在这种情况下,请使用:
for f in *.jpg; do mv -n "$f" "$(date -r "$f" +"%Y%m%d_%H%M%S").jpg"; done
为了根据EXIF创建日期(而不是文件系统日期)来命名文件,我们需要使用exiftool
或类似工具:
for f in *.jpg
do
mv -n "$f" "$(exiftool -d "%Y%m%d_%H%M%S" -CreateDate "$f" | awk '{print $4".jpg"}')"
done
说明:
上述命令与文件日期命令非常相似,但使用exiftool
和awk
提取EXIF图像创建日期。
exiftool
命令以以下格式提供日期:
$ exiftool -d "%Y%m%d_%H%M%S" -CreateDate sample.jpg
Create Date : 20121027_181338
我们想要的实际日期是输出中的第四个字段。
我们将exiftool
输出传递给awk
,以便它可以提取我们想要的字段:
awk '{print $4".jpg"}'
这将选择日期字段,并添加.jpg
扩展名。
mv -n "$f" "$(stat -c '%W' "$f").jpg"
根据文件的创建日期进行重命名。实际上,date -d
命令给出的是最后修改时间(但我在 Cygwin + Windows 上)。 - robermannfind . -type f | grep JPG$ | xargs -I{} sh -c 'mv -n "$1" $(date -r "$1" +"%Y%m%d_%H%M%S").jpg' - "{}"
- debuti感谢 @John1024 的帮助!
我需要同时按照最后修改日期,重命名不同扩展名的文件:
for f in *; do
fn=$(basename "$f")
mv "$fn" "$(date -r "$f" +"%Y-%m-%d_%H-%M-%S")_$fn"
done
"DSC_0189.JPG" ➜ "2016-02-21_18-22-15_DSC_0189.JPG"
"MOV_0131.avi" ➜ "2016-01-01_20-30-31_MOV_0131.avi"
如果您不想保留原始文件名:
mv "$fn" "$(date -r "$pathAndFileName" +"%Y-%m-%d_%H-%M-%S")"
希望这有助于像我一样的新手!
#!/bin/bash
BASEDIR=$1;
for file in `ls -1 $BASEDIR`; do
TIMESTAMP=`stat -f "%B" $BASEDIR/$file`;
DATENAME=`date -r $TIMESTAMP +'%Y%m%d-%H%M%S'`-$file
mv -v $BASEDIR/$file $BASEDIR/$DATENAME;
done
../camera/P1210232.JPG -> ../camera/20220121-103456-P1210232.JPG
试试这个
for file in `ls -1 *.jpg`; do name=`stat -c %y $file | awk -F"." '{ print $1 }' | sed -e "s/\-//g" -e "s/\://g" -e "s/[ ]/_/g"`.jpg; mv $file $name; done
exiftool "-filename<FileCreateDate" -d %Y%m%d_%H%M%S%z%%-c.%%le input.jpg
jhead
,这是一个很好的工具,可以用(或不用)EXIF数据重命名图片。 - freezed