我正在尝试使用jhead
或exiftool
创建脚本,以帮助我解决因Apple照片导出而导致的元数据问题。我正试图摆脱苹果生态系统,但Apple照片并不仅仅使用EXIF对照片进行排序,而且还导入日期等。因此,当我使用EXIF数据导出原始照片时,它们最终会出现在包含日期的目录中但是#39; t都有exif数据。
例如:
/8 February 2011/img - 6676.JPG
此目录中唯一没有元数据的照片。我想将日期(8-2-2011)添加到元数据中。
bash不是很好,所以如果有人可以提供帮助,我将非常感激。
答案 0 :(得分:1)
继续评论,您可以使用bash中的date -d
轻松将目录名称转换为日期。诀窍是从完整文件名解析目录(例如/8 February 2011/img - 6676.JPG
)。由于它是绝对路径,因此无论您是使用'/'
命令还是仅使用bash 字符串索引来删除前导dirname
>参数扩展(这里最简单)。
这是一个简短的示例,展示了如何处理您提供的目录。您可能需要修改jhead
命令,以便在所有照片上的任何脚本松动之前对其进行测试。
#!/bin/bash
f="/8 February 2011/img - 6676.JPG" ## example filename "$f"
[ "${f:0:1}" = '/' ] && d="${f:1}" ## check/trim leading '/' for dir "$d"
d="${d%%/*}" ## strip filename leaving dir for time in $d
dt="$(date -d "$d" +'%d-%m-%Y')" ## get date from $d in your format
jhdt="$(date -d "$d" +'%Y:%m:%d')" ## get date in format required by jhead
## output dates and commands for jhead
printf "file : \"%s\"\n" "$f"
printf "has date: %s\n" "$dt"
printf "jhead -mkexif \"%s\"\n" "$f"
printf "jhead -ds %s \"%s\"\n" "$jhdt" "$f"
示例使用/输出
$ bash dirtodate.sh
file : "/8 February 2011/img - 6676.JPG"
has date: 08-02-2011
jhead -mkexif "/8 February 2011/img - 6676.JPG"
jhead -ds 2011:02:08 "/8 February 2011/img - 6676.JPG"
答案 1 :(得分:0)
感谢您的帮助。这是我的" final"脏脚本修复我的25k照片集exif文件,由Apple照片生成并导出到Plex或Google照片:
#!/bin/bash
FILES=/share/Photos/Tom/*/*.jpg
DATE_IMPORT="2017:09:1*"
for f in $FILES
do
date_exif=`jhead -q "$f" | sed -n -e 's/^.*date //p' | cut -d' ' -f 5`
#echo $date_exif
if [[ $date_exif =~ $DATE_IMPORT ]]
then
aplevent=`echo "$f" | cut -d '/' -f 5`
date=`echo "$aplevent" | rev | cut -d',' -f 1 | rev;`
date_folder="$(date -d "$date" +'%Y:%m:%d')"
echo "Date exif: "$date_exif
echo "Date fix:"$date_folder
echo "$f"
jhead -mkexif "$f"
jhead -ds"$date_folder" "$f"
jhead -ft "$f"
fi
done