蘋果自帶的照片相簿總體上使用體驗還是不錯的,尤其是簡單修圖,人像識別,索引(你可以用文字搜尋圖片,比如搜尋“書”就會列出跟圖書相關的照片,雖然準確率不是 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

支援我們

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

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