相信剛接觸 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]
吧?),因此我在一次不經意的熱鍵連貫動作下,我又中招了。
之後我當然就小心翼翼的對待這個行為,當我以為我已經可以接受這種痛苦的拖拉後,奇怪的事情又出現了。
沒有覆蓋到?
明明乖乖用拖拉的方式做合併
了,卻發現目地資料夾中,有的東西怎麼還是舊的,沒有覆蓋到?抽絲剝繭後才發現,原來合併時,若目地資料夾中,重複的檔案或資料夾,其日期比你的來源還新,他就會忽略覆蓋,以較新的為主。
自己來吧
這是什麼鳥規則,實在受不了了,我決定開始研究 Shell Script ,打算自己寫 Automator 的服務處理掉這件事情。
開發過程中最痛苦的就是處理檔案本身及結合 Apple Script 後的跳脫字元問題,總算最終能完成,告別這惱人的取代
及合併
。
成果在此:
https://pilisir.github.io/macOS_merge_copy/
https://github.com/pilisir/macOS_merge_copy
希望能幫助到有相同困擾的您。
更新
- 修正檔名有連續空白會出錯的問題
如果你之前是按教學文件中的方法二,自行新增的,請注意本問題需同時將 shell 的傳遞輸入 從 作為引數使用
改為 至 stdin
。
推薦
搭配壓縮上層路徑,快速整理自己的專案交付物。
參考這裡。