macOS 複製 取代 合併

Jason
5 min readJun 7, 2019

--

天阿…我不能再承受第三次,我一定要解決這個問題

相信剛接觸 macOS 的人,或多或少都有遇過與 Windows 不同的操作行為及邏輯,也漸漸地去適應及習慣,但其中一項讓我一直無法適應,就是複製這件事情了

TL;DR

而 macOS 上的複製,如果在貼上時,遇到一樣是相同檔名的檔案或資料夾,則會跳出選項兩者皆保留停止取代 ,乍看之下與 Windows 一樣,但殊不知有多少剛從 Windows 或 Linux 轉來使用 macOS 的使用者,栽在這個陷阱中,本人就中招過兩次,幾乎都是欲哭無淚的狀態,或許你也是剛剛才親身領教過後,才逛到這篇文章。

刪掉再貼過來!?

兩只皆保留停止這兩個沒有問題,問題出在取代,選則取代會優先處理資料夾其次才是檔案,並且由上層往下層處理,這跟 Windows / Linux 有什麼不同?不同的就是當他遇到相同檔名的資料夾,會由在上層的資料夾做取代的動作,而不會去管裡面的檔案或子資料夾,所以你目地資料夾的內容就等於是先被刪掉,然後再把複製的檔案夾整個貼過來…。

認真!?第一次中招並瞭解到這個行為後,我大概就是這個表情。

檔案不見了

看個例子

新開發中的圖片,內容只有本次開發的
已交付客戶中的,則是累積過往有交付給客戶的所有圖片

你把 新開發中/image 複製已交付客戶/image 時,並選擇取代,那你的 已交付客戶/image 資料夾,就會長得跟 新開發中/image 一模一樣,也就是上面說的,目地資料夾先是被刪了之後才複製過來,然後你累積的一切切,就像是被薩諾斯用無限手套彈了一下…消失了。

對於有 Windows / Linux 使用經驗的人來說,先入為主的觀念會認為這極為不合常理,但我認為這沒有對錯,只是使用情境不同而已,的確我的使用情境大部分是 Windwos 的行為符合我的需求,因此我開始找尋 macOS 上有關複製時的合併方案,而不是這種刪了再貼過來的取代

合併

果然隨便 Google 了一下,就看到各種哀嚎遍野及厭世的發文。而替代方案也在這些文章中,由先烈提供。

當你有這種合併的需求時,你必須要按著鍵盤上的 [option],再用拖拉的方式,將檔案或資料夾,拖到目的資料夾中,然後你就會看到選項變為停止取代合併,這個多出的合併,就是與 Windwos / Linux 上的取代相同的機制。但…

BUT…,又是這個 BUT

既然有這個解法,那我為何又會中招第二次呢?

是,我笨

因為在我這種用慣 TouchPad,而不是 Mouse 的人來說,拖拉做太多次真的很煩,並且這個方法非常不直覺,他不能使用任何組合快速鍵( [option] + [command] + [V] 衝突了,那至少提供 [option] + [command] + [C]吧?),因此我在一次不經意的熱鍵連貫動作下,我又中招了。

之後我當然就小心翼翼的對待這個行為,當我以為我已經可以接受這種痛苦的拖拉後,奇怪的事情又出現了。

沒有覆蓋到?

明明乖乖用拖拉的方式做合併了,卻發現目地資料夾中,有的東西怎麼還是舊的,沒有覆蓋到?抽絲剝繭後才發現,原來合併時,若目地資料夾中,重複的檔案或資料夾,其日期比你的來源還新,他就會忽略覆蓋,以較新的為主。

I can’t take it anymore…

自己來吧

這是什麼鳥規則,實在受不了了,我決定開始研究 Shell Script ,打算自己寫 Automator 的服務處理掉這件事情。
開發過程中最痛苦的就是處理檔案本身及結合 Apple Script 後的跳脫字元問題,總算最終能完成,告別這惱人的取代合併

成果在此:
https://pilisir.github.io/macOS_merge_copy/
https://github.com/pilisir/macOS_merge_copy

希望能幫助到有相同困擾的您。

更新

  • 修正檔名有連續空白會出錯的問題

如果你之前是按教學文件中的方法二,自行新增的,請注意本問題需同時將 shell 的傳遞輸入 作為引數使用 改為 至 stdin

推薦

搭配壓縮上層路徑,快速整理自己的專案交付物。
參考這裡

--

--