首先我想说,我很清楚这个问题已经在多个 Stack Exchange 站点上被问过很多次了,但没有一个对我有用。
相关问题:
压缩没有父目录的目录中的所有文件和子文件夹(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 中的完整目录?
这应该符合您的预期:
wsl -e bash -c "cd absolute/path/to && zip -r folder.zip folder"