![如何壓縮多個資料夾,有些是遞歸的,有些是非遞歸的](https://rvso.com/image/1597819/%E5%A6%82%E4%BD%95%E5%A3%93%E7%B8%AE%E5%A4%9A%E5%80%8B%E8%B3%87%E6%96%99%E5%A4%BE%EF%BC%8C%E6%9C%89%E4%BA%9B%E6%98%AF%E9%81%9E%E6%AD%B8%E7%9A%84%EF%BC%8C%E6%9C%89%E4%BA%9B%E6%98%AF%E9%9D%9E%E9%81%9E%E6%AD%B8%E7%9A%84.png)
我有一個目錄列表。有些目錄要求遞歸地皮重,其他目錄只需要該目錄中存在的文件,不需要子目錄:使用下面的目錄/文件作為示例,我的 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.tar
f
- 我們開關的實際參數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
$