題 使用“mv”或“ditto”合併OS X中的文件夾


用於Windows的方式我剛發現OS X沒有合併功能 - 移動意味著更換文件夾。雖然這確實有意義,但我想念合併!


我有兩個Wordpress目錄,1個包含默認源,2個包含工作版本,插件自定義主題等。

我想看看這兩者之間的區別,所以我把它放在SVN上。文件夾1已經啟動,現在理論上我應該簡單地將2的內容合併為1,將所有內容替換為2,但保持隱藏的SVN文件不變。

不幸的是,OS X在移動時會替換該文件夾,以便我的SVN客戶端變得瘋狂並且不再理解文件夾結構。

所以,我相信我的選擇是 mv 和 ditto,但你會在我的情況下使用哪一個以及如何使用?

sudo mv wordpress /Documents/svn/wwwholiday/trunk/wordpress

我想要 mv 覆蓋它找到的所有內容,但只留下文件夾1中已有的內容並且文件夾2中沒有重複內容。


5
2018-06-06 18:02


起源




答案:


以一種方式合併文件夾的最簡單方法,例如

合併文件夾1→文件夾2中的所有內容

會使用 rsync

rsync -avh folder1/* folder2/

這將:

  • 將僅存在於文件夾1及其子目錄中的所有文件移動到文件夾2
  •  覆蓋文件夾2中的任何內容(如果它已經存在)
  • 覆蓋已更改的文件, 除非 你添加了 --ignore-existing 選項
  • 不刪除文件夾2中的任何內容, 除非 你添加了 --delete 選項

隨意適應您的情況(在哪裡 folder1 和 folder2 反之亦然,我想)。

您可以通過調用來嘗試查看命令的作用:

rsync -avh --dry-run folder1/ folder2/

dry-run 開關顯示它的作用。


不要忘記反斜杠有特殊含義,所以 folder2/ 因為目的地不一樣 folder2。檢查的聯機幫助頁 rsync 用法和更多選擇。

還建議是 -P (根據 --helpsame as --partial --progress這增加了 show progress during transfer 和 keep partially transferred files (如果出現故障,這對重試很有用)。


11
2018-06-06 18:12



但我確實需要命令覆蓋文件。文件夾2包含更新的php文件。哪個需要寫在文件夾1的內容上。只想保留文件夾1 svn文件。
對不起,當然已被更改的文件將被該命令覆蓋。僅完全跳過尚未更改的文件。只要您的源文件夾不包含SVN文件,就可以進行設置。 - slhck
@killermist OP特別想保留SVN文件,這就是我加入通配符的原因 故意,因為沒有dotglob選項,它只會跳過SVN目錄。當然你可以通過其他方式將它們從rsync中排除,但是......這是為了簡單起見。 - slhck


你可以像@slhck說的那樣做,或者你也可以使用 cp

$sudo cp -R wordpress/ /Documents/svn/wwwholiday/trunk/wordpress

0
2018-06-06 18:16



這會創建一個副本 wordpress  內  /Documents/svn/wwwholiday/trunk/wordpress。你的意思是 wordpress/? - Daniel Beck♦
不固定。 如果 源文件 以/結尾,複製目錄的內容而不是目錄本身。 - Daniel Beck♦
這不是OP想要的嗎? - 에이바
嗯,是的,但你加了 / 到了 目標不是 資源。 - Daniel Beck♦