苹果自带的照片图库总体上使用体验还是不错的,尤其是简单修图,人像识别,索引(你可以用文字搜索图片,比如搜索“书”就会列出跟图书相关的照片,虽然准确率不是 100%,但我们又不用它来破案,差不多可以了),地点等等功能,但是……

苹果把所有的操作都隐藏在了照片图库的文件夹下,这里面真是一团乱麻,
有多少重复的照片浪费你的存储空间?
咋管理非苹果设备拍摄的照片呢?都导入到照片库中吗?
随着时间的推移,照片库越来越大,你的小硬盘扛得住吗?

你当然可以购买 icloud 订阅服务,实事求是地讲,真可谓价格便宜,量又足。
iCloud 不但可以帮你
云端存储所有的照片原图,而且
还能压缩你本地照片库,删除本地的照片原图,
还能查重,没错,不使用 iCloud 照片库是没有这个功能的,奸商
而你只要根据空间大小每个月花点小钱就好了。

但是……
你愿意把你的隐私照片存放到第三方云吗,哪怕这个第三方是苹果?
你愿意把你未来的工作流都基于苹果的设备吗?
你必须有一台苹果的电脑(或者软件,看苹果心情)才可以下载图片?
你愿意每个月都额外花点钱来存储你的照片吗?即便价格还算中肯?
你有考虑过迁移的难度吗?还是你确定这辈子就跟苹果死磕了?

如果你跟我一样对此有所顾虑,是时候该整一台 NAS 了。
把你的照片图库搬到 NAS 上吧。

如果你以为有了 NAS,就能把照片图库放上去了,那就太低估苹果的奸商程度了。
随随便便就让你把照片图库安在 NAS 上,谁来订阅 iCloud 服务。
不过这也难不倒我们,至少目前我们还是有办法的。

本文试图解决:

  1. 将多个照片图库,苹果自带的和你自己的相册文件夹合并
  2. 去重,去除所有照片库的重复照片
  3. 依旧使用苹果自带的照片应用来管理图片,但是把照片(库)放到 NAS 上

下面的两段视频解决了:

  1. 合并图库与去重
  2. 将照片库放置 NAS 上的两种方法
    • 以前:通过使用磁盘镜像 DMG 文件,迂回实现 NAS 存储照片库
      缺点:效率低,风险大
    • 目前:使用 reference file 的方法,不将项目复制到照片图库
      缺点:本地电脑还是需要一定存储,大概需要 5%~10%的原始图片大小吧,若是在意,可以将这个结合上面的方法,通过 DMG 转存到 NAS 上,因为文件较小,应该可以兼顾效率。

喜欢我的视频欢迎订阅点赞分享呀,老张在此谢谢大家了。

上部:

下部:

老张说:

脚本在这里:
注意视频中的问题已经修复,图片被移动到他自己的上上级目录,而不是当前工作目录的上上级目录。
之所以移动到他自己的上级目录而不是一个指定的目录,主要是因为,同一个硬盘或者说同一个卷下面,移动速度比较快,跨磁盘移动比较慢。
你要确保你自己的图库也有上上级目录才可以哦。

如果你的需求和我类似,你可以直接使用下面的代码,但是需要修改 fileloc 的值(2处)。
第一处 fileloc="…“将引号内修改为你系统照片图库的位置。
第二处 fileloc=”…“将引号内修改为你存放其他照片的位置。

#!/usr/bin/env bash
# ================================================================
#    _____         _      _            _____
#   |_   _|       | |    ( )          /  __ \  https://tnl.casa
#     | |   _ __  | |    |/  ___      | /  \/  __ _  ___   __ _
#     | |  | '_ \ | |       / __|     | |     / _` |/ __| / _` |
#     | |  | | | || |____   \__ \     | \__/\| (_| |\__ \| (_| |
#     \_/  |_| |_|\_____/   |___/      \____/ \__,_||___/ \__,_|
# ================================================================

# current tool location
wdir=$(cd "$(dirname "$0")" || exit;pwd)
# data file location for this tool && make dir if not exist
wddir=${wdir}/data.dulfiles

md5list=${wddir}/md5list

mkdir -p "${wddir}"

# fileloc=/SmartHome/PlayStation/PhotoAlbum
fileloc="${HOME}/Pictures/照片图库.photoslibrary/originals"

result=$(find "${fileloc}" -type f | tr \\n \\0 | xargs -P 10 -n1 -0 -I '{}' md5 -r '{}')
printf "%s\n" "${result}" > "${md5list}.mac"

nFiles=$(wc -l "${md5list}.mac" | awk '{print $1}')
printf "%s files md5 have been calculated.\n" "${nFiles}"

fileloc=/SmartHome/PlayStation/PhotoAlbum

result=$(find "${fileloc}" -type f | tr \\n \\0 | xargs -P 10 -n1 -0 -I '{}' md5 -r '{}')
printf "%s\n" "${result}" > "${md5list}.nas"

nFiles=$(wc -l "${md5list}.nas" | awk '{print $1}')
printf "%s files md5 have been calculated.\n" "${nFiles}"

# ====================================================================================
spliter=","
sed "s/ /${spliter}/1" "${md5list}.mac" "${md5list}.nas" > \
    "${md5list}.all"

awk -F${spliter} -v fl="${fileloc}" '
{a=$2;
gsub("\(_[[:digit:]]\)*\.[^\.]*$","",a);
if(index($2,"_3.mov")){b=1}else if(index($2,fl)){b=3}else{b=4};
printf "%s,%s,%s,%s\n",$1,$2,a,b}
' "${md5list}.all"  > "${md5list}.all.detail"

grep _3.mov "${md5list}.all.detail" | awk -F${spliter} '{printf "%s,%s\n",$3,2}' > \
    "${md5list}.live"

awk -F${spliter}  '
FNR==NR{a[$1]=$2;next}
{if(($3 in a) && $4 != 1){printf "%s,%s,%s\n", $1,$2,a[$3]}else{printf "%s,%s,%s\n", $1,$2,$4}}
' "${md5list}.live" "${md5list}.all.detail" | sort -t ${spliter} -k1,1 -k3,3 > "${md5list}.all.sort"

awk -F${spliter} -v OFS="${spliter}" \
    '{if($1 == MD5) {print $0;}; if($1 != MD5) {MD5 = $1;}}' \
    "${md5list}.all.sort" > "${md5list}.delete"

# awk -F${spliter} '
# BEGIN{print "#!/usr/bin/env bash"}
# {print "mv \"" $2 "\" ../../"}
# ' "${md5list}.delete" > "${md5list}.delete.mv.sh"
# fix upstairs as followed, move files to its up up folder
# instead of the up up folder of the working directory.
awk -F${spliter} '
BEGIN{print "#!/usr/bin/env bash"}
{a=$2;gsub("/[^/]*/[^/]*$","",a);print "mv \"" $2 "\" \"" a "\""}
' "${md5list}.delete" > "${md5list}.delete.mv.sh"
chmod +x "${md5list}.delete.mv.sh"

nFiles=$(wc -l "${md5list}.delete" | awk '{print $1}')

printf "%s files need to be deleted!\n" ${nFiles}

# process rule:
# 1. _3.mov ranking 1
# 2. live pictures with same name above ranking 2
# 3. /SmartHome/PlayStation/PhotoAlbum ranking 3
# 4. others ranking 4

支持我们

如果您喜欢这篇文章,您可以分享给您的朋友,分享到您的社交账号比如:

或者 点击这个链接 观看广告支持我【广告内容与我们无关,请不要轻易相信并打开弹出的广告】。
若您经济宽裕,更欢迎通过下面的方式小额赞助以支持我们的创作。