前段時間我學會瞭如何: 將特定類型的文件從一個目錄複製到另一個目錄 在 Linux 上。我們今天做同樣的事情,但也保持目錄結構。這個簡短的教程向您展示瞭如何在 Linux 中復制特定的文件類型,同時保留目錄結構。這裡有兩種不同的方法來做到這一點。請選擇適合您的那一款。
在 Linux 中保留目錄結構的同時復制特定文件類型
想像一下這個場景。
我有一個文件叫 “Linux” 不同類型的文件保存在不同的子目錄中。請參閱下面的目錄結構。
$ tree Linux/ Linux/ ├── dir1 │ ├── English │ │ └── Kina - Can We Kiss Forever.mp3 │ ├── Instrumental │ │ └── Chill Study Beats.mp3 │ └── Tamil │ ├── Kannan Vanthu.mp3 │ └── yarenna.mp3 ├── dir2 │ ├── file.docx │ └── Raja Raja Chozan Naan.mp3 ├── dir3 │ ├── Bamboo Flute - Meditation - Healing - Sleep - Zen.mp3 │ └── pic.jpg └── dir4 ├── Aaruyirae.mp3 └── video.mp4 7 directories, 10 files
使用 tree 命令列出目錄的內容。
從上面的目錄結構可以看出, Linux 該目錄有四個子目錄。 目錄 1, 目錄 2, 目錄 3 什麼時候 目錄 4.這個 mp3 這些文件分佈在所有四個子目錄中。現在我想複製所有內容 mp3 具有不同名稱的文件 “骨科手術” 我想在目標目錄中保持相同的目錄結構。
首先,我們將看看如何使用“find”命令來做到這一點。
方法 1 – 使用“find”和“cp”或“cpio”命令
轉到源目錄。
$ cd Linux/
使用“查找”命令複製所有 mp3 文件類型。
$ find . -name '*.mp3' -exec cp --parents {} ~/ostechnix ;
讓我們分解上面的命令,看看每個選項的作用。
- 尋找 – 在類 Unix 系統上查找文件和文件夾的命令。
- 這個 觀點 (.) – 表示從當前目錄複製內容。
- -iname ‘*.mp3’ – 搜索與擴展名 .mp3 匹配的文件。
- -exec cp – 運行“cp”命令將文件從源目錄複製到目標目錄。
- – 父母 – 如有必要,通過創建中間父目錄來保留父目錄結構。
- {} – 自動替換為“find”命令找到的文件的文件名。大括號被轉義 某些版本的“find”命令保護它們免受 shell 擴展。你也可以使用 {} 沒有轉義字符。
- ~/ostechnix – 目標目錄包含匹配的文件。
- ; – 表示要運行的命令已完成,將在下一場比賽中再次運行該命令。
此命令從 ~/Linux 目錄中搜索所有 mp3 類型文件並將它們複製到 ~/ostechnix 目錄中。它還在目標目錄中保持相同的目錄結構。
您可以在兩個地方使用“tree”命令進行檢查,如下所示。
在 Linux 中使用 Tree 命令列出目錄的內容
正如您在上面的輸出中看到的,目標目錄只有 mp3 文件,其目錄結構與源目錄相同。
如果您從其他位置執行此操作,請指定源目錄的完整路徑,如下所示。
$ find ~/Linux -name '*.mp3' -exec cp --parents {} ~/ostechnix ;
此命令搜索所有文件 Linux/ 複製到位置 ostechnix/~/Linux/.
在 Linux 中保留目錄結構的同時復制特定文件類型
如果 – 父母 如果該選項不起作用,您可以使用 find 命令 cpio 此命令在保留目錄結構的同時復製文件。
$ find . -name '*.mp3' | cpio -pdm ~/ostechnix
這裡,
- cpio – 將文件複製到檔案和從檔案中復制的命令。
- -p – 從標準輸入讀取文件名列表並將它們複製到指定目錄。
- -d – 如有必要,創建目錄。
- -m – 保留文件修改時間。
有關詳細信息,請參見手冊頁。
$ man find
$ man cp
$ man cpio
推薦閱讀:
- 如何在特定文件夾中自動組織相似類型的文件
方法 2 – 使用 Rsync
同步 是本地和遠程系統之間的強大工具。要將特定類型的文件從一個目錄複製到另一個目錄,同時保留父目錄結構,請運行以下命令:
$ rsync -a -m --include '*/' --include '*.mp3' --exclude '*' ~/Linux/ ~/ostechnix
再次,
$ rsync -a --prune-empty-dirs --include '*/' --include '*.mp3' --exclude '*' ~/Linux/ ~/ostechnix
這裡,
- rsync – 遠程(和本地)文件複製工具。
- -1 – 存檔模式可以保存幾乎所有內容(包括符號鏈接、修改日期、文件權限、所有者等)
- -m, –prune-empty-dirs – 從源代碼樹中刪除空目錄。如果要包含空目錄,請從上面的命令中刪除此選項。
- –include=”*/” –include=”*.mp3″ –exclude=”*” – 要僅包含特定文件,您必須首先包含這些特定文件,然後排除所有其他文件。在我們的例子中,我們包含了 *.mp3 文件並排除了其他所有文件。
- ~/Linux – 源目錄。
- ~/ostechnix – 目標目錄。
示例輸出:
在 Linux 上使用 Rsync 複製特定文件類型,同時保留目錄結構
有關詳細信息,請參見手冊頁。
$ man rsync
希望這可以幫助。
複製文件 cpcpiofindLinuxLinux 命令 Rsync