前段時間我學會瞭如何: 將特定類型的文件從一個目錄複製到另一個目錄 在 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 中保留目錄結構的同時復制特定文件類型

在 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 複製特定文件類型,同時保留目錄結構

在 Linux 上使用 Rsync 複製特定文件類型,同時保留目錄結構

有關詳細信息,請參見手冊頁。

$ man rsync

希望這可以幫助。

複製文件 cpcpiofindLinuxLinux 命令 Rsync