![壓縮的同時保留來自任何地方的相對目錄](https://rvso.com/image/1554892/%E5%A3%93%E7%B8%AE%E7%9A%84%E5%90%8C%E6%99%82%E4%BF%9D%E7%95%99%E4%BE%86%E8%87%AA%E4%BB%BB%E4%BD%95%E5%9C%B0%E6%96%B9%E7%9A%84%E7%9B%B8%E5%B0%8D%E7%9B%AE%E9%8C%84.png)
嘗試從 中取得特定功能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
.