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

2021-03-02 Linux中國

怎樣將兩個布局相似的目錄樹合併成一個新的目錄樹?為理解該問題讓我們思考下面的例子。

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

輸入目錄布局

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

文件布局

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

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

遞歸複製完成新的合併

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

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

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

企圖使用mv命令進行合併操作

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

2. 解決方法:

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

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

原文件的inodes

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

使用硬連結合併的目錄

2.1 驗證文件:

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

Verify Inodes

2.2 清除:

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

移除原始目錄

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

原文作者:Raghu

譯者:hunanchenxingyu 校對:Caroline

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

相關焦點

  • 使用cat命令在Linux中組合文本文件
    然後可以將合併的文本保存到另一個文本文件中。 在本教程中,您將學習如何使用cat命令將兩個或多個文件中的文本合併為一個文件。 這將幫助您從普通初學者獲得Ubuntu上的高級用戶狀態。 我們在Ubuntu 18.04 LTS系統上運行了本教程中提到的命令。
  • linux刪除命令rm的使用
    在linux中創建文件很容易,系統中隨時會有文件變得過時且毫無用處。用戶可以用rm命令將其刪除。該命令的功能為刪除一個目錄中的一個或多個文件或目錄,它也可以將某個目錄及其下的所有文件及子目錄均刪除。對於連結文件,只是刪除了連結,原有文件均保持不變。
  • 每天一個 Linux 命令(23):Linux 目錄結構
    ,深入了解linux文件目錄結構的標準和每個目錄的詳細功能,對於我們用好linux系統只管重要,下面我們就開始了解一下linux目錄結構的相關知識。當在使用Linux的時候,如果您通過ls –l / 就會發現,在/下包涵很多的目錄,比如etc、usr、var、bin … … 等目錄,而在這些目錄中,我們進去看看,發現也有很多的目錄或文件。
  • linux作業系統常用命令及常用問題
    >linux作業系統詳解(linux不再難懂)●man :任何時候你覺得對一個命令行不是很確定,都可以通過輸入「man + 命令」了解這個命令能確切是做什麼的。 為了停止正在運行的進程,讓其在後臺(不運行),我們可以使用組合鍵 Ctrl+Z。(LCTT譯註:如果希望其在後臺運行,還需要使用bg命令並指定其Ctrl+Z得到的任務號,才可以在後臺運行。)●2.
  • Linux:掛接(mount)命令的使用方法
    其實linux系統下製作和使用光碟鏡像比Windows系統更方便,不必借用任何第三方軟體包。   1、從光碟製作光碟鏡像文件。將光碟放入光碟機,執行下面的命令。我們可以使用下面的命令掛接/dev/sdc1和/dev/sdc5。
  • Linux掛載命令mount用法及參數詳解
    若漢字文件名顯示為亂碼或不顯示,可以使用下面的命令格式。#mount -t ntfs -o iocharset=cp936 /dev/sdc1 /mnt/usbhd1 #mount -t vfat -o iocharset=cp936 /dev/sdc5 /mnt/usbhd2linux系統下使用fdisk分區命令和mkfs文件系統創建命令可以將移動硬碟的分區製作成linux系統所特有的ext2、ext3
  • 命令行生存指南:拆分與合併|Linux 中國
    如果採用先將大文件拆分成多個小文件進行傳輸、待全部傳輸完成後合併所有文件的方式,往往可以改善傳輸體驗。 這一節將會介紹 Linux 命令行下的文件拆分與合併操作。 概念和術語 拆分,顧名思義,就是將一個大的文件分割成若干個較小的文件,這些小文件按次序拼接後可以還原大文件。
  • Linux基礎命令之:實驗內容及小結
    命令為:su-root(4)查看cross-3.3.2.tar.bz2所在的Windows下對應分區的格式,並記下其文件設備名稱,如「/dev/hda1」等。命令為:fdisk-l(5)使用mkdir命令在「/mnt」新建子目錄作為掛載點。命令為:mkdir/mnt/win(6)掛載Windows相應分區。
  • linux最常用的命令
    【cp命令】 --- 將源文件複製到目標文件,或將多個源文件複製到目標目錄注意:如果目標文件已存在會提示是否覆蓋,而在shell腳本中,如果不加-i參數,則不會提示,而是直接覆蓋常用命令:cp -ai a.txt test 複製a.txt到test目錄下,保持原文件時間,如果原文件存在,提示是否覆蓋cp -s a.txt link_a.txt
  • Linux常用命令:Linux more命令使用方法
    1.命令格式:more [-dlfpcsu ] [-num ] [+/ pattern] [+ linenum] [file ... ] 2.命令功能:more命令和cat的功能一樣都是查看文件裡的內容,但有所不同的是more可以按頁來查看文件的內容,還支持直接跳轉行等功能。
  • Python學習第173課——Linux複製文件命令
    假設在linux_intro這個文件夾裡面,我們放了一個文件,這個文件其實也可以通過命令,複製到red_hat和full_stack裡面。那麼如何實現呢?我們先通過cd linux_intro這個命令,把目錄切換到linux_intro裡面,然後通過touch linux_oprate.txt這個命令,在linux_intro這個文件夾裡面生成 linux_oprate.txt這個文件。生成之後,還可以通過ls查看一下。關於touch,我們可以通過man touch去查看它的說明書。
  • linux命令大全
    5.linux命令大全之文件傳輸篇Linux命令大全中涉及文檔傳輸的命令有15條,分別為:lprm、lpr、lpq、lpd、bye、ftp、uuto、uupick、uucp、uucico、tftp、ncftp、ftpshut、ftpwho、ftpcount。
  • XshellPortable——linux優秀連接工具教程(帶常用命令)
    有很多人在剛剛學習開發的時候總對linxu有很大的不理解和不會使用,這些都很正常,畢竟linux不是可視化操作。今天就帶來Xshell使用教程Xshell 是一個強大的安全終端模擬軟體,它支持SSH1, SSH2, 以及Microsoft Windows 平臺的TELNET 協議。
  • 文件和目錄屬性相關 Linux 命令詳解,收藏~
    ,深入了解linux文件目錄結構的標準和每個目錄的詳細功能,對於我們用好linux系統只管重要,下面我們就開始了解一下linux目錄結構的相關知識。當在使用Linux的時候,如果您通過ls –l / 就會發現,在/下包涵很多的目錄,比如etc、usr、var、bin ... ... 等目錄,而在這些目錄中,我們進去看看,發現也有很多的目錄或文件。
  • Linux下使用tar命令
    一般格式為xx.tar.bz2-v :壓縮的過程中顯示文件!這個常用-f :使用檔名,請留意,在 f 之後要立即接檔名喔!不要再加其他參數!-p :使用原文件的原來屬性(屬性不會依據使用者而變)--exclude FILE:在壓縮的過程中,不要將 FILE 打包。
  • 為Linux的cp和mv命令添加進度條
    cp和mv可能是大家日常中使用最多的Linux命令之一。但是有一個突出的問題是這兩個命令都不會有任何提示信息,這在操作大文件時候只能幹等。可能大家對此已經習以為常,但是其實上也有解決解決方法,本文我們就介紹一個Gnu Coreutils(cp和mv的原始碼包)的補丁Advanced Copy,用於給其增加進度條的功能。
  • 每天學一個 Linux 命令(11):cp
    cp命令用來複製文件或目錄。cp命令用來將一個或多個文件或者目錄複製到指定的目的文件或目錄。它可以將單個源文件複製成一個指定文件名的具體的文件或一個已經存在的目錄下。cp命令還支持同時複製多個文件,當一次複製多個文件時,目標文件參數必須是一個已經存在的目錄,否則將出現錯誤。所以,cp命令還具備重命名的功能。
  • Linux常用命令:nslookup,lsmd5sum,uname,history等
    在linux中,文件、文件夾、驅動、命令、腳本都視為文件。9、mkpasswd此命令根據指定長度,產生一個難猜的隨機密碼。其中-l表示長度(Length)。如下圖產生15位的隨機密碼。10、date此命令使用標準的輸出列印當前的日期和時間。更多命令設置,可以使用date --help命令。
  • Linux基礎命令帖:echo的使用
    此命令的適用範圍:RedHat、RHEL、Ubuntu、CentOS、Fedora。語法echo [-neE] [arg ...]選項列表使用示例使用「\f」換行[root@localhost~]# echo -e "hello\fworld" //必須使用-e選項,\f換行之後,光標還在結尾hello world[root@localhost ~]#使用「\n」換行[root@localhost ~]#
  • linux中的vim命令
    如何查看命令的幫助文檔,三種方式:內置命令:help ls外部命令:ls --help,簡單的幫助文檔手冊man ls, 通過使用man查看詳細的幫助內容vim和vi命令本質上就是一個命令,這個命令是在linux命令中專門用來編輯文本文件的