群晖相片整理实践-2020春

◇◆丶佛笑我妖孽 提交于 2020-02-29 16:59:18

写在前面

  • 现代生活离不开手机,照片也是日积月累。
  • 至从在操作 iPhone4 的 iCloud 不慎丢失照片之后,痛定思痛。
  • 后面的日子一直备份照片、多地备份。时间久了,照片越来越多,整理起来非常头疼。

遇到的问题

  • 积攒了10多年的照片,文件数量已接近5万、体积也过250G了。
  • 相同照片不同分辨率的版本。
  • 截屏图片、非手机拍照的照片。
  • 手动整理,遇到量大,无所适从。

我的思考

  • 以前只管存,没有花时间整理。现在疫情封闭,是时候整理它了。
  • 买了群晖存储,把过往照片全存进去。
  • 摸索了一些方式,最终决定写个程序去整理。

整理思路

  • 只保留带 Exif 信息的照片,手机/数码相机拍的原图必定包含这些信息。
  • 按年来分目录存放,这样目录不会太多,单目录文件也不太多。
  • 照片按统一的时间格式重命名。

开干

  • 经过几轮编写、调试、验证,脚本新鲜出炉:
    JPG图片整理
  • 话不多说,简短源码贴出来:
#!/bin/bash
# Move photo to a format path
sDir="${1:-/volume1/photo/All-In/}"
dDir="${2:-/volume1/photo/Image/}"
mDepth="${3:-2}"
iLog="${dDir}move.csv"
eLog="${dDir}move.err"
declare -A mCode=(["0"]="Created" ["1"]="Exsit" ["2"]="Overwrite" ["3"]="Noneed" ["4"]="Unknow" ["5"]="Failed")
function AddLog(){
        echo "${rCode:-4},$(date +%F\ %T),${sPath},${dPath},${fTime}" >>"${iLog}" 2>>"${eLog}"
        return "${rCode}"
}
touch "${iLog}" "${eLog}"
find "${sDir}" -maxdepth "${mDepth}" ! -path "*@eaDir*" -iname "*.jpg" -o -iname "*.jpeg" | while read sPath; do
        unset "rCode" "dPath" "oTime" "fTime"
        grep -q "${sPath}" "${iLog}" && continue || oTime=`exiv2 -q -g Exif.Photo.DateTimeOriginal -P v "${sPath}" 2>>"${eLog}"`
        if [ -z "${oTime}" ]; then
                rCode=3 && AddLog
                continue
        fi
        fTime=$(echo "${oTime}" | sed 's/:/-/;s/:/-/')
        dPath=$(date -d "${fTime}" +"${dDir}%Y/%Y%m%d-%H%M%S.jpg")
        if [ -f "${dPath}" ]; then
                if [ `stat --printf=%s "${dPath}"` -lt `stat --printf=%s "${sPath}"` ]; then
                        cp -v "${sPath}" "${dPath}" 2>>"${eLog}" && rCode=2 || rCode=5
                else
                        rCode=1
                fi
        else
                cp -v "${sPath}" "${dPath}" 2>>"${eLog}" && rCode=0 || rCode=5
        fi
        AddLog
done

验证效果

  • 数据无价,读不懂脚本的朋友不建议尝试。开启群晖的ssh-server,连上去、跑起来!晒下执行现场:
    脚本执行现象
  • 解决了我的大问题
  1. 自动筛选原图
  2. 自动去重(保留最大的)
  3. 生成图片信息库
  • 以后再用不用担心图片多,存也不是、丢也不是了。
标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!