web-dev-qa-db-fra.com

linux comment ajouter un fichier à un dossier spécifique dans un fichier Zip

je sais comment ajouter un fichier au dossier racine dans un fichier Zip:

Zip -g xxx.apk yyy.txt

mais je ne sais pas comment spécifier un dossier particulier dans un fichier Zip

26
asfman

Si vous devez ajouter le fichier dans le même dossier que dans la hiérarchie de répertoires d'origine, il vous suffit d'y ajouter le chemin d'accès complet:

Zip -g xxx.Zip folder/file

Sinon, la façon la plus simple de le faire est probablement de créer la même disposition dont vous avez besoin dans le fichier Zip dans un répertoire temporaire.

30
jcollado

Pour élaborer sur la réponse @Ignacio Vazquez-Abrams d'il y a un an, vous pouvez utiliser une bibliothèque de niveau inférieur, comme celle fournie avec 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

Cela ouvrira myfile.Zip et ajouter source/dir/file.txt du système de fichiers en tant que dir/in/Zip/file.txt dans le fichier Zip.

9
that other guy

Info-Zip ne peut pas faire cela. Vous devrez écrire un script ou un programme dans une langue disposant d'un accès de niveau inférieur aux fichiers Zip.

3

J'ai dépensé un peu @ "cet autre gars" solution

Accédez à la console, appuyez sur ctrl + x, ctrl + e, collez-y

( 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

puis exécutez /tmp/Zip-extend my_Zip.zip your/existing/file_to_add.xml directory_in_Zip/file_to_add.xml

Exemple:

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 -

Résultat:

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