群晖照片视频整理归档-完结篇

  • 闲暇之余 整理往日照片,历经了 exiv2 / exiftool 重命名、 SQLite 归档 和 人工识别 。
  • 群晖存储上有价值的文件名都已经格式化完毕,赶紧把它们 异地 备份一轮,脚本如下:
#!/bin/bash
# Copy.sh : Backup the files to remote storage.
readonly pDir="${1:-~/XiaoMi/Image/}" # 照片文件备份路径 readonly vDir="${2:-~/XiaoMi/Video/}" # 视频文件备份路径 readonly dDir="${3:-~/XiaoMi/Document/}" # 日志存储目录 readonly iLog="${dDir}Copy.log" # 备份成功 readonly wLog="${dDir}Copy.wan" # 已经存在 readonly eLog="${dDir}Copy.err" # 无需备份和出错信息 readonly debug=false # 调试开关,按需开启 readonly stdName="(^|[[:space:]])[2,1][0,9][0,1,2,7,9][0-9][0-1][0-9][0-3][0-9]-[0-2][0-9][0-5][0-9][0-5][0-9]($|[[:space:]])" # 标准格式 find ~{higkoo,anglix}/Drive/{Moments,Backup} ! -path "*@eaDir*" -type f | while read -r sPath; do unset fName sExt rCopy rCode nDir dPath sExt="${sPath##*.}" && sExt="${sExt,,}" [[ ${sExt} == "jpeg" ]] && sExt='jpg' # 将jpeg后缀改为jpg fName="${sPath##*/}" && fName="${fName%%.*}" if [[ $fName =~ $stdName ]]; then # 识别文件名 case $sExt in jpg | livp | heic | cr2 ) nDir="${pDir}${fName:0:4}/" rCopy=true && rCode='+' ;; mp4 | mov | m4v | wmv ) nDir="${vDir}${fName:0:4}/" rCopy=true && rCode='-' ;; png | * ) # 鄙视 png ,全是截图 rCopy=false && rCode='*' ;; esac else rCopy=false && rCode='/' fi if [[ $rCopy && ! -z ${nDir} ]]; then dPath="${nDir}${fName}.${sExt}" if [[ ! -f "${dPath}" || `stat --printf=%s "${dPath}" 2>/dev/null` -lt `stat --printf=%s "${sPath}"` ]]; then mkdir -pv "${nDir}" >> ${wLog} cp -v "${sPath}" "${dPath}" >>${iLog} 2>>${eLog} else echo "$sPath" >> ${wLog} && rCode='^' fi else echo "$sPath" >> ${eLog} fi echo -ne "$rCode" $debug && declare -p sPath dPath && exit 0 done 
    • 照片体积小,相对容易移动、分享,所以和视频独立开、均按年分目录。
    • 脚本经过千锤百炼、始出来,让它跑一会:
      远程备份照片和视频
    • 之前用exiv2重命名后备份过一次,所以不少^以示逃过。
    • +代表收获1张新照片,-代表收获1张新视频,/是不必备份的文件。
    • 至此,照片/视频整理工作完毕、剩下就是给它们安全的备份起来(略)。
    • 网络营销

猜你喜欢

转载自www.cnblogs.com/1994july/p/12438843.html