尝试从中获取特定功能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
。