如何壓縮多個資料夾,有些是遞歸的,有些是非遞歸的

如何壓縮多個資料夾,有些是遞歸的,有些是非遞歸的

我有一個目錄列表。有些目錄要求遞歸地皮重,其他目錄只需要該目錄中存在的文件,不需要子目錄:使用下面的目錄/文件作為示例,我的 tar 命令看起來如何:

/tmp/dir1/ - Recursively
/tmp/dir2/ - Only the files that exist in that directory, no subdirectories
/tmp/dir3/file1 - Only this single file.

答案1

這是我想出來的:

首先,我使用的目錄結構作為範例:

$ find dir1 dir2 dir3 -print
dir1
dir1/file1
dir1/file2
dir1/sub_dir1
dir1/sub_dir1/file1
dir2
dir2/file1
dir2/file2
dir2/sub_dir1
dir2/sub_dir1/file1
dir3
dir3/file1
$

接下來,我的解決方案由三個命令組成:

第一個命令:

tar cvf archive.tar dir1

相當標準。讓我們把它分解一下:

  • c- 創造
  • v- 詳細(讓我們看看發生了什麼)
  • f- 在我們的例子中我們想要的檔名archive.tar
  • archive.tarf- 我們開關的實際參數
  • dir1- 我們想要真正塗上焦油的東西

第二條指令:

find dir2 -maxdepth 1 -type f -print0 | xargs -0 tar rvf archive.tar

讓我們把它分解一下:

  • find dir2- 我們想要找到搜尋的地方。
  • -maxdepth 1- 深度不要超過 1 (停留在 的根部dir2
  • -type f- 搜尋文件
  • -print0- 不要在末尾列印換行符,而是使用空字元。如果 find 找到其中包含空格的文件,這會幫助我們。
  • | xargs -0- 我們用 find 指令找到的標準輸入被丟到這裡執行,同時尊重我們的print0
  • tar rvf- 這裡唯一的新開關是r。這是我們的附加選項。它添加到我們的archive.tar末尾。不要與A特定於附加附加檔案的選項 ( -s)混淆.tar
  • archive.tar- 我們想要附加的焦油。

    這個命令的末尾是使用我們的 stdinput 的地方。例如archive.tar <stdinput>

第三條命令:

tar rvf archive.tar dir3/file1

附加到archive.tar單一文件 ( file1) 來自dir3.

最後,焦油創建後的樣子。此t選項用於列印其內容。

$ tar tvf archive.tar
drwxrwxr-x mmallard/mmallard 0 2019-07-18 16:02 dir1/
-rw-rw-r-- mmallard/mmallard 0 2019-07-18 16:01 dir1/file1
-rw-rw-r-- mmallard/mmallard 0 2019-07-18 16:01 dir1/file2
drwxrwxr-x mmallard/mmallard 0 2019-07-18 16:02 dir1/sub_dir1/
-rw-rw-r-- mmallard/mmallard 0 2019-07-18 16:02 dir1/sub_dir1/file1
-rw-rw-r-- mmallard/mmallard 0 2019-07-18 16:02 dir2/file1
-rw-rw-r-- mmallard/mmallard 0 2019-07-18 16:02 dir2/file2
-rw-rw-r-- mmallard/mmallard 0 2019-07-18 16:02 dir3/file1
$

相關內容