zipファイル内のルートフォルダーにファイルを追加する方法を知っています。
Zip -g xxx.apk yyy.txt
しかし、Zipファイル内の特定のフォルダを指定する方法がわかりません
元のディレクトリ階層と同じフォルダにファイルを追加する必要がある場合は、そのファイルへのフルパスを追加するだけです。
Zip -g xxx.Zip folder/file
それ以外の場合は、おそらくそれを行う最も簡単な方法は、一時ディレクトリのZipファイルに必要なものと同じレイアウトを作成することです。
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.txt
がdir/in/Zip/file.txt
としてZipファイルに追加されます。
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