如何使 zip 文件中的目录相对于目标目录而不是我的工作目录

如何使 zip 文件中的目录相对于目标目录而不是我的工作目录

我正在从无法更改目录的脚本调用 zip 命令。我需要data/kit123/从数据所在的目录中创建一个包含 的内容的 zip 文件,但我希望 zip 的内容仅为 的内容kit123,并带有相对于 的路径kit123

这是目录结构

myworkingdir
    data
        kit123
            kitpart1
                file.xcf
                anotherfile.xcf
            kitpart2
                ...
        kit124
            ...

我的脚本在 myworkingdir 中运行,无法更改目录。

如果我打电话

zip -r kit123.zip data/kit123

那么 zip 文件的结构将是

data
    kit123
        kitpart1
            file.xcf
            anotherfile.xcf
        kitpart2

但我希望如此

kit123
    kitpart1
        file.xcf
        anotherfile.xcf
    kitpart2

有没有 zip 选项可以用来实现这一点?这似乎很奇怪,它应该取决于我的工作目录

我知道这不是-j。那个破坏了kit123内的结构

答案1

正如您在评论中指出的那样,您现在知道如何使用脚本更改目录,我将解释有关相对路径的 zip 的情况。

打开终端并cd执行可能是最简单的kit123方法;您必须将目标目录作为您的工作目录 - 您不能从主目录的基础运行该命令,否则它将获取所有路径。/home/$USER/..如果您使用该-j选项,它将删除所有路径,因为实际上没有与 tar 选项等效的选项--strip可以指定不同级别的路径删除。

因此请 cd 到你的目标目录 ( kit123) 并输入:

zip -r kit123.zip *

这将以递归方式 ( -r) 保留*当前目录 ( ) 中的所有 ( ) 文件和文件目录kit123,并且由于相对路径 ( -p) 会自动保留,除非-j存在该选项,因此目录结构将按照您希望的方式进行。并且将出现包含自己文件的Kit123子文件夹 ( ):kitpart1

kit123
    kitpart1
        file.xcf
        anotherfile.xcf
    kitpart2

您可以使用 检查 zip 文件的内容unzip -l zipfile.zip

有关其他可用选项的更多信息zip,请man zip参阅Ubuntu 在线手册页

相关内容