web-dev-qa-db-ja.com

Linux Zipファイル内の特定のフォルダにファイルを追加する方法

zipファイル内のルートフォルダーにファイルを追加する方法を知っています。

Zip -g xxx.apk yyy.txt

しかし、Zipファイル内の特定のフォルダを指定する方法がわかりません

26
asfman

元のディレクトリ階層と同じフォルダにファイルを追加する必要がある場合は、そのファイルへのフルパスを追加するだけです。

Zip -g xxx.Zip folder/file

それ以外の場合は、おそらくそれを行う最も簡単な方法は、一時ディレクトリのZipファイルに必要なものと同じレイアウトを作成することです。

30
jcollado

1年前の@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.txtdir/in/Zip/file.txtとしてZipファイルに追加されます。

9
that other guy

Info-Zipはこれを行うことができません。スクリプトまたはプログラムは、Zipファイルへの低レベルのアクセス権を持つ言語で作成する必要があります。

私は少し「他の人」の解決策を費やしました

コンソールに移動し、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
2
test30