Linux

從不同的目錄創建一個 tar.gz 文件,tar 必須將文件保存在特定的目錄結構中

  • April 13, 2022

這是我的文件結構。我目前居住在test2/目錄中,所有命令都必須從那裡執行。

test/
 |_test2/
publish/
 |_subfolder1/
     |_f1
     |_f2
     |_f3
     |_subfolder2/
         |_f4
         |_f5
         |_f6
         |_f7

我需要執行以下操作

  1. 創建 subfolder2 的 tar.gz(同名)
  2. 刪除子文件夾2
  3. 創建 subfolder1 的 tar.gz (名稱相同),包括 subfolder2.tar.gz
  4. 刪除子文件夾1

最後 tar 結構應該是這樣的

publish/
 |_subfolder1.tar.gz
     |_subfolder2.tar.gz

當我解壓縮目前路徑中的每個 tar.gz 時,輸出應如下所示:

publish/
 |_subfolder1.tar.gz
 |_subfolder1/
     |_f1
     |_f2
     |_f3
     |_subfolder2.tar.gz
     |_subfolder2/
         |_f4
         |_f5
         |_f6
         |_f7

我可以通過執行以下操作來完成此操作:

cd ../../publish/subfolder1
tar -zxf subfolder2.tar.gz subfolder2/
rm -rf subfolder2
cd ../
tar -zxf subfolder1.tar.gz subfolder1/
rm -rf subfolder1
cd ../test/test2

我真的不希望我的腳本在帶有cd. 我嘗試使用以下命令:

tar -zcf ../../publish/subfolder1/subfolder2.tar.gz -C ../../publish/subfolder1/subfolder2/ .
rm -rf ../../publish/subfolder1/subfolder2/
tar -zcf ../../publish/subfolder1.tar.gz -C ../../publish/subfolder1/ .
rm -rf ../../publish/subfolder1/

這將創建 tarball,但會刪除目錄。解壓後,我看到以下內容:

publish/
 |_subfolder1.tar.gz
 |_subfolder2.tar.gz
 |_f1
 |_f2
 |_f3 
 |_f4
 |_f5
 |_f6
 |_f7

如何在不使用一堆 cd 命令的情況下將文件夾路徑保留在 tarball 結構中?

要歸檔 的內容foo請切換到foo目前tar目錄:-C /some/dir/foo .。要歸檔foo目錄本身,請更改為foo的父目錄和tar foo: -C /some/dir foo

所以命令看起來像:

tar -zcf ../../publish/subfolder1/subfolder2.tar.gz -C ../../publish/subfolder1 subfolder2
rm -rf ../../publish/subfolder1/subfolder2/
tar -zcf ../../publish/subfolder1.tar.gz -C ../../publish subfolder1
rm -rf ../../publish/subfolder1/

引用自:https://unix.stackexchange.com/questions/698969