Linux

創建不同位置的多個目錄的 tar.gz 存檔——《tar:懦弱拒絕創建空存檔》

  • May 25, 2022

我正在嘗試創建一個成就:

$ cd /tmp
$ tar -czf test1.tar.gz -C ~/Downloads/dir1 -C ~/Documents/dir2 -C ~/dir3/dir4/dir5

…這應該不會保留其中目錄的完整路徑,因此-C

結果

tar: Cowardly refusing to create an empty archive
Try 'tar --help' or 'tar --usage' for more information.

為什麼?如何解決?

您的命令在概念上等同於:

tar -czf test1.tar.gz -C ~/Downloads/dir1 "" -C ~/Documents/dir2 "" -C ~/dir3/dir4/dir5 ""

用人的話說:

  • tar -czf test1.tar.gz: “製作一個以目前工作目錄命名的 gzipped tar 存檔test1.tar.gz,如下:…”
  • -C ~/Downloads/dir1 "":“…首先,切換到目錄~/Downloads/dir1,並從那裡歸檔任何內容…”
  • -C ~/Documents/dir2 "":“……然後,切換到目錄~/Documents/dir2並從那裡歸檔任何內容……”
  • -C ~/dir3/dir4/dir5 "":“……最後,切換到~/dir3/dir4/dir5並從那裡歸檔任何內容。”

你可能想要這樣的東西:

tar -czf test1.tar.gz -C ~/Downloads/dir1 . -C ~/Documents/dir2 . -C ~/dir3/dir4/dir5 .

這將“無存檔”部分替換為“存檔目前目錄的內容”,該部分剛剛切換到使用該-C選項。

請注意,當您提取生成的存檔時,dir1dir2的存檔內容dir5將全部提取到提取時的目前目錄。如果這就是您想要的,那很好,但這是一個稍微不尋常的案例。(這樣的存檔被稱為tar 炸彈,並且在遇到意外時通常不喜歡,因為它不會整齊地提取到由提取過程創建的單個目錄中。)

為了解釋起見,這裡有一個稍微不同的命令:

tar -czf test2.tar.gz -C ~/Downloads dir1 -C ~/Documents dir2 -C ~/dir3/dir4 dir5

提取時test2.tar.gz會產生:

./dir1
./dir2
./dir5

…及其內容。

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