Zip文件中包含绝对路径,但只保留其中的部分。

14
zip -r 1.zip /home/username/the_folder

当我在这里解压1.zip时,无论我从哪个文件夹进行解压,它都会创建/home/username/the_folder

我该如何压缩,指定完整的绝对路径,但仅使压缩文件包含从此处开始的文件夹结构,例如在本例中,是/home/username

这样一来,无论我想要到达的路径是什么,解压后它只会创建一个the_folder,而不是/home/username/the_folder

4个回答

12

使用此命令:

cd path_under_folder_to_zip && \
zip -r 1.zip folder_to_zip >/dev/null && \
mv 1.zip my_current_path

cd path_under_folder_to_zip && zip -r my_current_path/1.zip folder_to_zip >/dev/null - Daniel Pérez Rada
在 macOS 上运行得非常好 :) 谢谢。 - Guy Kahlon

7

在指定要压缩的文件时,请使用相对路径。

cd /home/username
zip -r 1.zip ./the_folder

然后,当您解压缩时,它将成为一个相对路径,从您解压缩时所在的文件夹开始。

1
他想要能够使用绝对路径。请注意,“我想要的任何路径”。虽然你说的有道理。 - Niraj Nawanit
不是关于这个主题,但那个简单的解决方案帮了我。谢谢你的想法! - NSukonny

1
  • 列表项

这个怎么样:

function zipExtraFolder {
    if [ $# -lt 2 ]; then
        echo "provide at least two arguments"
        return
    fi
    folder=$2
    mkdir del
    echo cp -r `dirname $folder` del
    cd del
    echo zip -r ../$1 .
    cd -
    rm -rf del
}

在你的 .bashrc 文件中定义上述内容为一个 shell 函数,这样你就可以在任何时候使用它了。 使用方法如下。
zipExtraFolder 1.zip /home/username/the_folder

我真的看不懂那段代码,当我开始制作更复杂的zip命令时,这不会引起问题吗? - john-jones

1

只需使用-j选项,适用于OSX,我不知道Linux是否适用。

zip -j -r 1.zip /home/username/the_folder


1
我遇到了一个错误,显然是因为在该文件夹中有两个同名的文件实例。尽管它们位于不同的子文件夹中。 - john-jones
8
我忘了,当与 -r 选项一起使用时,-j 选项并不实用,因为它会压缩根目录下所有文件而不保留文件夹结构。 - jackjr300
如果 -j 对您不起作用,请查看此答案 - czerasz

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