使用相对路径压缩文件?

12
我想创建我的USB键的备份。为此,我需要压缩我的USB键内容(/Volumes/<USB KEY NAME>/)。目前我有这段代码:
zip -r /Volumes/<USB KEY NAME>/*看起来很有效,但问题是当我解压缩存档时,我得到以下结果:

(为了简化(和懒惰)的目的,<USB KEY NAME>+(<DATE>).zip实际上是Archive.zip)

Archive.zip
    -> Volumes
        -> <USB KEY NAME>
            -> <USB KEY CONTENT>
                -> ...

如何获取仅:
Archive.zip
    -> <USB KEY NAME>
        -> <USB KEY CONTENT>
            -> ...

我知道这与绝对/相对路径有关,但这就是我所知道的。我该怎么做?

附注:我使用的是MacOS操作系统。

3个回答

12

尝试使用-j选项。

这将只存储保存文件的名称(忽略路径),而不存储目录名称。默认情况下,zip会存储完整路径(相对于当前路径)。


1
我尝试了但是出现了错误,说我有两个同名的文件,这可能是因为我使用了-j选项,那我该怎么办? - Blax
1
在压缩文件之前,尝试将工作目录更改为USB驱动器。包括原始的-r选项,但不包括-j选项。因此:cd /Volumes/<USB KEY NAME>/ 然后 zip -r * - mlapointe22

4

根据man zip告诉我们的消息,

-j --junk-paths 仅存储保存文件的名称(丢弃路径),不存储目录名称。默认情况下,zip将存储完整路径(相对于当前目录)

然而,-j会丢弃所有路径信息,这导致所有文件都被放在同一个包中,没有任何路径信息。

方法1: 更改当前目录(cd

cd /Volumes; zip -rq $(OLDPWD)/Archive.zip <USB_Key_Name>; cd -

方法2:使用符号链接。

ln -s /Volumes/<USB_Key_Name> . # create symlink to avoid cd
zip -rq Archive.zip <USB_Key_Name>
rm <USB_Key_Name> # remove symlink

0
只需控制路径到目标存档。
cd /Volumes/<USB KEY NAME>;
zip -r ../../archive.zip *

  adding: ./file-in-usb-key-name-dir (stored 0%)
  adding: ./subdir/file (stored 0%)
  ...

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接