Linux
在Linux中合 併2個目錄樹而不複製?
我有兩個佈局相似的目錄樹,即
. |-- dir1 | |-- a | | |-- file1.txt | | `-- file2.txt | |-- b | | `-- file3.txt | `-- c | `-- file4.txt `-- dir2 |-- a | |-- file5.txt | `-- file6.txt |-- b | |-- file7.txt | `-- file8.txt `-- c |-- file10.txt `-- file9.txt
我想合併 dir1 和 dir2 目錄樹來創建:
merged/ |-- a | |-- file1.txt | |-- file2.txt | |-- file5.txt | `-- file6.txt |-- b | |-- file3.txt | |-- file7.txt | `-- file8.txt `-- c |-- file10.txt |-- file4.txt `-- file9.txt
我知道我可以使用“cp”命令執行此操作,但我想移動文件而不是複制,因為我要合併的實際目錄非常大並且包含很多文件(數百萬)。如果我使用“mv”,由於目錄名稱衝突,我會收到“文件存在”錯誤。
更新:您可以假設兩個目錄樹之間沒有重複文件。
rsync -ax --link-dest=dir1/ dir1/ merged/ rsync -ax --link-dest=dir2/ dir2/ merged/
這將創建硬連結而不是移動它們,您可以驗證它們是否被正確移動,然後刪除
dir1/
和dir2/
.
奇怪的是沒有人注意到
cp
有選項-l
:-l,--連結 硬連結文件而不是複制
你可以做類似的事情
% mkdir 合併 % cp -rl dir1 /* dir2 /* 合併 % rm -r 目錄* % 樹去 走 ├── 一個 │ ├── file1.txt │ ├── file2.txt │ ├── file5.txt │ └── file6.txt ├── b │ ├── file3.txt │ ├── file7.txt │ └── file8.txt └── c ├── file10.txt ├── file4.txt └── file9.txt 13 個目錄,0 個文件