在 Linux 中怎樣使用cp命令合併目錄樹
假設 dir1 和 dir2 目錄中分別有3個子目錄a,b和c.目錄布局如下所示:
在目錄a,b和c中有一些文件,tree命令的輸出將能更好的說明:
1. 使用cp命令創建合併:
現在我們將這兩個目錄合併成一個名為"merged"新的目錄中.完成上述操作最簡單的方式就是遞歸複製目錄,如下圖所示:
遞歸複製完成新的合併
1.1 cp命令和替換帶來的問題:
這種方式所帶來的問題是該合併目錄中所創建的文件為原文件的副本,並非原文件本身.別急, (你可能正在問自己) 如果不是原文件又有什麼問題? 要回答你的問題,考慮下你有很多大文件的情況.那種情形下,複製所有的文件可能花費數小時。
現在讓我們回到剛那問題上,且嘗試使用mv命令而不是cp命令。
這些目錄不能被合併.因此我們不能像這樣使用mv命令去合併目錄. 現在你該怎樣將原文件保存到"merged"目錄中?
2. 解決方法:
cp命令有一個非常有用的選項來幫助我們擺脫這種狀況. cp命令的-l 或 --link選項能夠創建硬鏈接而非原文件副本.讓我們嘗試一下。
在我們嘗試cp命令的硬鏈接選項前,讓我們查看一下原文件的inode號碼. 可通過tree命令--inodes選項來查看inodes:
現在我們有了inodes的列表,對於cp命令可通過--link選項創建硬鏈接:
2.1 驗證文件:
現在文件已經被複制,讓我們驗證一下inodes是否和原文件匹配:
2.2 清除:
正如你所看到的,這些文件的inodes和原文件的一樣。現在問題已經解決,且原文件已被複制到合併目錄中.現在我們能夠移除dir1和dir2目錄。
via: http://linoxide.com/linux-command/merge-directory-trees-linux/
原文作者:Raghu
譯者:hunanchenxingyu 校對:Caroline
本文轉載來自 Linux 中國: https://github.com/Linux-CN/archive