压缩的同时保留任意位置的相关目录

压缩的同时保留任意位置的相关目录

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

相关内容