如何使用 zip 命令进行压缩,但排除父目录(cd 不是一个选项)?

问题描述 投票:0回答:1

首先我想说,我很清楚这个问题已经在多个 Stack Exchange 站点上被问过很多次了,但没有一个对我有用。

相关问题:

Unix 压缩子目录不包括父目录

压缩没有父目录的目录中的所有文件和子文件夹(unix.stackexchange.com)

压缩存档而不包含父目录(askubuntu.com)

如何在不压缩父目录的情况下压缩目录? [重复](askubuntu.com)

我目前正在编写一个小脚本,如果运行该脚本,将使用

wsl zip
压缩指定的文件夹。我遇到的问题是,如果我使用绝对路径告诉命令要压缩什么,它会包含整个路径,而不是仅从最后一个文件夹(我实际想要压缩的文件夹)开始。

许多与此相关的问题已得到解答,建议在尝试压缩之前使用

cd
pushd
,并省略
zip
命令中的绝对路径。然而,这就是我失败的地方。

我正在使用 Windows Subsystem for Linux 来访问

zip
命令,但我是在 Windows 控制台中执行此操作的。我正在使用的有问题的命令:

> wsl -e zip -r absolute/path/to/folder.zip absolute/path/to/folder

但这将产生如下所示的 zip 文件结构:

folder.zip
  absolute
    path
      to
        folder
          *

虽然我正在寻找的结果是:

folder.zip
  folder
    *

我尝试使用命令

cd
来省略
zip
命令中的绝对路径,但没有成功。因为我需要从 Windows 控制台中运行命令,而不是在 WSL 控制台中运行命令,所以以下选项不是

> wsl ~
~$ cd absolute/path/to
absolute/path/to$ zip -r folder.zip folder

相反,我尝试使用这样的命令:

> wsl -e "cd absolute/path/to && zip -r folder.zip folder"

但这导致了以下错误:

<3>WSL (10963) ERROR: CreateProcessCommon:559: execvpe(cd) failed: No such file or directory

如果我将命令简化为:

,也会发生同样的错误
> wsl cd absolute/path/to

所以问题又来了,当我无法使用

cd
pushd
时,如何省略 zip 中的完整目录?

windows ubuntu zip windows-subsystem-for-linux
1个回答
0
投票

这应该符合您的预期:

wsl -e bash -c "cd absolute/path/to && zip -r folder.zip folder"
© www.soinside.com 2019 - 2024. All rights reserved.