在我目前的目錄下,我有兩個子目錄:
dir_1/
- file1.png
- file2.png
...
- fileN.png
dir_2/
- fileA.txt
- ...
- fileZ.txt
當我透過以下方式 tar 壓縮兩個目錄時:
tar -cvzf result.tar.gz dir_1/ dir_2/
我有結果.tar.gz但它保留了目錄結構。我的意思是當我提取結果.tar.gz,我再次得到dir_1
& dir_2
。
如何 tar 壓縮以便不保留目錄結構,這意味著當我提取 tar.gz 檔案時,我只得到文件
result/
file1.png
...
fileN.png
fileA.txt
...
fileZ.txt
答案1
我認為你可以透過該-C
選項來做到這一點。
從 tar 手冊頁:
-C directory, --cd directory, --directory directory
In c and r mode, this changes the directory before adding the following files.
In x mode, change directories after opening the archive but before extracting
entries from the archive.
這意味著您應該能夠運行
tar cvzf result.tar.gz -C /path/to/dir1/ . -C /path/to/dir2/ .
實現你想要的。
答案2
使用 GNU tar,您可以--transform
在將檔案新增至檔案或從檔案擷取檔案時使用重寫檔案名稱的選項。對於 BSD tar 或 pax,此選項-s
執行相同的操作。
若要刪除前導目錄組件(以便dir_1/subdir/somefile
儲存為subdir/somefile
):
tar -czf result.tar.gz --transform '!^[^/]*/!!' dir_1 dir_2
若要刪除所有目錄組件(以便dir_1/subdir/somefile
儲存為somefile
):
tar -czf result.tar.gz --transform '!^.*/!!' dir_1 dir_2