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

时间:2015-01-03 18:50:40

标签: 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脚本中使用它,我不能像我想要的那样更改文件夹。

感谢您的建议,对不起我的英语。

1 个答案:

答案 0 :(得分:0)

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

cp -rp /home/folder1/folder2/folder3/* .
for file in /home/folder1/folder2/folder3/*; do
echo "${file#/home/folder1/folder2/folder3/}"
done | xargs zip -r test.zip

然后用

删除它们
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