如何将文件添加到zip文件中的特定文件夹?(Linux操作系统)

37

我知道如何将文件添加到zip文件的根目录:

 

zip -g xxx.apk yyy.txt

但我不知道如何指定zip文件中的特定文件夹。

4个回答

39

如果您需要将文件添加到与原始目录层次结构相同的文件夹中,则只需将其完整路径添加即可:

zip -g xxx.zip folder/file

否则,最简单的方法可能是在临时目录中创建与zip文件中所需相同的布局。

8
如果我想将 yyy.txt 放入 xxx.apk 的 assets 文件夹中,首先必须创建 assets 文件夹,然后将 yyy.txt 移动到其中。然后执行 zip -g xxx.apk assets/yyy.txt。 - asfman
如果您想要在不将文件复制到新创建的目录中的情况下拥有良好的层次结构,可以创建符号链接:ln -s long_path_on_disk folder_in_zip。然后,zip -g xxx.zip folder_in_zip/file。 - vhamon

11

为了更详细地阐述 @Ignacio Vazquez-Abrams 一年前的答案,您可以使用较低级别的库,例如Python自带的库:

#!/bin/bash
python -c '
import zipfile as zf, sys
z=zf.ZipFile(sys.argv[1], "a")
z.write(sys.argv[2], sys.argv[3])
z.close()
' myfile.zip source/dir/file.txt dir/in/zip/file.txt

这将打开myfile.zip并从文件系统中添加source/dir/file.txt作为zip文件中的dir/in/zip/file.txt


4

Info-ZIP无法完成此操作。您需要使用一种具有更低级别访问zip文件的语言编写脚本或程序。


如果我想将 yyy.txt 放入 xxx.apk 的 assets 文件夹中,首先我必须创建 assets 文件夹,然后将 yyy.txt 移动到其中。然后执行 zip -g xxx.apk assets/yyy.txt。 - asfman
1
或者,您可以生成一个人工Zip条目,将其放入“ assets /”中,然后将其与文件数据组合并添加到Zip文件中。 - Ignacio Vazquez-Abrams

3

我稍微改进了一下“那个人”的解决方案

打开控制台,按下ctrl+x,ctrl+e,在里面粘贴

( cat <<-'EOF'
#!/bin/bash
if [ $# -lt 3 ]; then
echo my_zip.zip your/existing/file_to_add.xml directory_in_zip/file_to_add.xml
exit
fi

python -c '
import zipfile as zf, sys
z=zf.ZipFile(sys.argv[1], "a")
z.write(sys.argv[2], sys.argv[3])
z.close()' $1 $2 $3
EOF
) > /tmp/zip-extend && chmod +x /tmp/zip-extend

那么就运行/tmp/zip-extend my_zip.zip your/existing/file_to_add.xml directory_in_zip/file_to_add.xml

示例:

cd /tmp
touch first_file.txt
zip my_zip.zip first_file.txt
unzip -l my_zip.zip
mkdir -p your/existing
touch your/existing/file_to_add.xml
/tmp/zip-extend my_zip.zip your/existing/file_to_add.xml directory_in_zip/file_to_add.xml
unzip -l my_zip.zip
cd -

结果:

Archive:  my_zip.zip
  Length      Date    Time    Name
---------  ---------- -----   ----
        0  2013-12-17 15:24   first_file.txt
        0  2013-12-17 15:24   directory_in_zip/file_to_add.xml
---------                     -------
        0                     2 files

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接