Linux中國

在 Linux 中怎樣使用cp命令合併目錄樹

假設 dir1 和 dir2 目錄中分別有3個子目錄a,b和c.目錄布局如下所示:

Layout of input directories 輸入目錄布局

在目錄a,b和c中有一些文件,tree命令的輸出將能更好的說明:

Layout of files 文件布局

1. 使用cp命令創建合併:

現在我們將這兩個目錄合併成一個名為"merged"新的目錄中.完成上述操作最簡單的方式就是遞歸複製目錄,如下圖所示:

Copy directories recursively to create new merge 遞歸複製完成新的合併

1.1 cp命令和替換帶來的問題:

這種方式所帶來的問題是該合併目錄中所創建的文件為原文件的副本,並非原文件本身.別急, (你可能正在問自己) 如果不是原文件又有什麼問題? 要回答你的問題,考慮下你有很多大文件的情況.那種情形下,複製所有的文件可能花費數小時。

現在讓我們回到剛那問題上,且嘗試使用mv命令而不是cp命令。

Attempt to merge with mv command 企圖使用mv命令進行合併操作

這些目錄不能被合併.因此我們不能像這樣使用mv命令去合併目錄. 現在你該怎樣將原文件保存到"merged"目錄中?

2. 解決方法:

cp命令有一個非常有用的選項來幫助我們擺脫這種狀況. cp命令的-l 或 --link選項能夠創建硬鏈接而非原文件副本.讓我們嘗試一下。

在我們嘗試cp命令的硬鏈接選項前,讓我們查看一下原文件的inode號碼. 可通過tree命令--inodes選項來查看inodes:

Display inodes of original files 原文件的inodes

現在我們有了inodes的列表,對於cp命令可通過--link選項創建硬鏈接:

Merge directories with hard links 使用硬鏈接合併的目錄

2.1 驗證文件:

現在文件已經被複制,讓我們驗證一下inodes是否和原文件匹配:

Verify Inodes Verify Inodes

2.2 清除:

正如你所看到的,這些文件的inodes和原文件的一樣。現在問題已經解決,且原文件已被複制到合併目錄中.現在我們能夠移除dir1和dir2目錄。

Remove original directories 移除原始目錄

via: http://linoxide.com/linux-command/merge-directory-trees-linux/

原文作者:Raghu

譯者:hunanchenxingyu 校對:Caroline

本文由 LCTT 原創翻譯,Linux中國 榮譽推出


本文轉載來自 Linux 中國: https://github.com/Linux-CN/archive

對這篇文章感覺如何?

太棒了
0
不錯
0
愛死了
0
不太好
0
感覺很糟
0
雨落清風。心向陽

    You may also like

    Leave a reply

    您的郵箱地址不會被公開。 必填項已用 * 標註

    這個站點使用 Akismet 來減少垃圾評論。了解你的評論數據如何被處理

    More in:Linux中國

    Linux中國

    捐贈 Let's Encrypt,共建安全的互聯網

    隨著 Mozilla、蘋果和谷歌對沃通和 StartCom 這兩家 CA 公司處罰落定,很多使用這兩家 CA 所簽發證書的網站紛紛尋求新的證書籤發商。有一個非盈利組織可以為大家提供了免費、可靠和安全的 SSL 證書服務,這就是 Let's Encrypt 項目。現在,它需要您的幫助
    Linux中國

    關於Linux防火牆iptables的面試問答

    Nishita Agarwal是Tecmint的用戶,她將分享關於她剛剛經歷的一家公司(印度的一家私人公司Pune)的面試經驗。在面試中她被問及許多不同的問題,但她是iptables方面的專家,因此她想分享這些關於iptables的問題和相應的答案給那些以後可能會進行相關面試的人。 所有的問題和相應的答案都基於Nishita Agarwal的記憶並經過了重寫。 嗨,朋友!我叫Nishita Agarwal。我已經取得了理學學士學位,我的專業集中在UNIX和它的變種(BSD,Linux)。它們一直深深的吸引著我。我在存儲方面有1年多的經驗。我正在尋求職業上的變化,並將供職於印度的P
    Linux中國

    Lets Encrypt 已被所有主流瀏覽器所信任

    旨在讓每個網站都能使用 HTTPS 加密的非贏利組織 Lets Encrypt 已經得了 IdenTrust的交叉簽名,這意味著其證書現在已經可以被所有主流的瀏覽器所信任。從這個裡程碑事件開始,訪問者訪問使用了Lets Encrypt 證書的網站不再需要特別配置就可以得到 HTTPS 安全保護了。 Lets Encrypt 的兩個中級證書 ...