壓縮的同時保留來自任何地方的相對目錄

壓縮的同時保留來自任何地方的相對目錄

嘗試從 中取得特定功能zip。我想將所有內容遞歸壓縮到特定目錄中,並僅保留該目錄中的目錄結構,但不讓完全限定的路徑成為存檔的一部分。

假設我已經/path/to/test/tmp/並且希望將所有內容tmp/壓縮起來,就像我從該資料夾中運行命令一樣。

-r標誌得到我想要的,但包括我需要的目錄上方的路徑信息,具體取決於我運行它的位置:

user@MBP:~/path/to/test$ zip -r myarchive.zip tmp/
  adding: tmp/foo.txt (deflated 68%)
  adding: tmp/bar/bar.txt (deflated 41%)
  adding: tmp/baz/baz/baz.txt (deflated 92%)

-j標誌會截斷除檔案名稱之外的所有內容:

user@MBP:~/path/to/test$ zip -rj myarchive.zip tmp/
  adding: foo.txt (deflated 68%)
  adding: bar.txt (deflated 41%)
  adding: baz.txt (deflated 92%)

我需要的是能給我這個的東西:

adding: foo.txt (deflated 68%)
adding: bar/bar.txt (deflated 41%)
adding: baz/baz/baz.txt (deflated 92%)

但我可以指定從任何地方運行。我正在嘗試將其編寫為 cron 腳本。我在其中找不到我要找的東西手冊頁。除了實際更改腳本中的目錄之外,我怎麼能實現這一目標?

答案1

看起來zip(至少是我平台上的 Info-ZIP 版本)不允許您這樣做。 (與tar具有-C/--directory選項的 不同,正如 @Xen2050 所暗示的那樣。)

但是,我不得不問,更改腳本中的目錄有那麼糟嗎?特別是如果您可以在子 shell 中執行此操作並且不會影響腳本的當前工作目錄(詳細解釋在這個SO答案中):

pwd
(cd /path/to/test/tmp; zip -r myarchive.zip .)
pwd    # prints the same as in line 1

請注意,這會將最終的 Zip 檔案儲存在/path/to/test/tmp.

相關內容