jer*_*ood 58 zip bash path shell-script macos
我正在制作一个shell脚本来打包一些文件。我正在压缩这样的目录:
zip -r /Users/me/development/something/out.zip /Users/me/development/something/folder/
Run Code Online (Sandbox Code Playgroud)
问题是生成的 out.zip 存档中包含整个文件路径。也就是说,解压缩后,它将包含整个“/Users/me/development/anotherthing/”路径。将目录放入存档时是否可以避免这些深层路径?
当我从目标目录中运行 zip 时,我没有这个问题。
zip -r out.zip ./folder/
Run Code Online (Sandbox Code Playgroud)
在这种情况下,我没有得到所有的垃圾。但是,有问题的脚本将从任何地方调用。
FWIW,我在 Mac OS X 10.6 上使用 bash。
qua*_*ote 104
在发出命令之前,您的脚本应该使用cd或pushd和popd移动到将成为存档根目录的目录。你如何做到这一点将取决于脚本如何知道要压缩什么。但是,如果您希望/Users/me/development/something/folder使用./folder 的内部路径压缩,则需要执行以下操作:zip
pushd /Users/me/development/something
zip -r /path/to/out.zip ./folder/
popd
Run Code Online (Sandbox Code Playgroud)
这将导致您的out.zip包含您想要的相对路径。
如果您在编写脚本方面需要帮助,则需要向我们展示您的脚本。
jww*_*jww 10
问题是生成的 out.zip 存档中包含整个文件路径。
...
将目录放入存档时是否可以避免这些深路径?
是的。使用-j带有的选项zip。-j是“垃圾路径”。根据zip 上的手册页:
仅存储已保存文件的名称(垃圾路径),而不存储目录名称。默认情况下,zip 将存储完整路径(相对于当前目录)。
使用-j意味着以下命令:
zip -j myarchive.zip file1.txt dir1/file2.txt dir2/dir3/file3.txt ../file4.txt
Run Code Online (Sandbox Code Playgroud)
将创建一个如下所示的存档:
myarchive.zip
|
+-- file1.txt
+-- file2.txt
+-- file3.txt
+-- file4.txt
Run Code Online (Sandbox Code Playgroud)
小智 7
有pushd和popd和$OLDPWD。假设$PWD是/Users/me/development这样做:
pushd something/folder
zip -r $OLDPWD/something/out.zip *
popd
Run Code Online (Sandbox Code Playgroud)
现在$PWD回到/Users/me/development
| 归档时间: |
|
| 查看次数: |
63436 次 |
| 最近记录: |