Bash 仅使用最后一个文件夹创建zip

Bash 仅使用最后一个文件夹创建zip,bash,zip,Bash,Zip,我正在尝试使用zip工具创建zip存档。 例如: zip -r test.zip /home/folder1/folder2/folder3/* 它使用与命令中完全相同的目录结构创建存档。 我知道,有选项-j,但它完全忽略了目录结构。 在folder3中还有另一个文件夹,我想在zip中找到它。 所以我需要一些东西,就像 cd /home/folder1/folder2/folder3/ zip -r test.zip * 但我不能使用这个,因为我将在CGI脚本中使用这个,我不能像我想要的那样

我正在尝试使用zip工具创建zip存档。 例如:

zip -r test.zip /home/folder1/folder2/folder3/*
它使用与命令中完全相同的目录结构创建存档。 我知道,有选项-j,但它完全忽略了目录结构。 在folder3中还有另一个文件夹,我想在zip中找到它。 所以我需要一些东西,就像

cd /home/folder1/folder2/folder3/
zip -r test.zip *
但我不能使用这个,因为我将在CGI脚本中使用这个,我不能像我想要的那样更改文件夹


感谢您的建议,我的英语很抱歉。

如果您无法创建子shell来使用cd/home/folder1/folder2/folder3/&&zip-r test.zip*执行zip操作,您可以将文件从指定目录复制到当前目录,在for循环中选择它们,然后执行zip-r

然后用手把它们取下来

for file in /home/folder1/folder2/folder3/*; do
rm -r "${file#/home/folder1/folder2/folder3/}"
done
如果当前目录中的文件夹和文件与/home/folder1/folder2/folder3中的同名,则此解决方案会出现问题

您可以使用测试预先是否存在同名的文件夹/文件

for i in /home/folder1/folder2/folder3/*; do
[[ ! -e ${i#/home/folder1/folder2/folder3/} ]] || echo "$i exists"
done

Re:我将在CGI脚本中使用这个,我不能像我想要的那样更改文件夹:这不一定是真的。如果您编辑您的问题以包含CGI脚本中的相关代码行,我们可以展示一些方法,您可以使用所需的当前工作目录运行此命令。
for i in /home/folder1/folder2/folder3/*; do
[[ ! -e ${i#/home/folder1/folder2/folder3/} ]] || echo "$i exists"
done