web-dev-qa-db-fra.com

Supprimer un seul fichier de l'archive Zip sous Linux

J'ai une archive Zip (créée automatiquement dans un script avec des indicateurs -j -r) et je souhaite supprimer un seul fichier de celle-ci. J'ai essayé comme documenté.

Zip -d "picture_43_9.jpg" gallery.Zip

mais j'obtiens cette erreur:

Zip warning: picture_43_9.jpg not found or empty   
Zip error: Nothing to do! (picture_43_9.jpg)  

Quoi qu'il en soit, il y a est un tel fichier dans l'archive et il n'est pas vide:

unzip -l .../gallery.Zip | grep -i 43_9.jpg  
1477092  2013-05-22 14:23   picture_43_9.jpg 

Des idées sur ce que je fais mal?

67
Alex Flo

Vous avez les arguments échangés. Essaye ça:

Zip -d gallery.Zip "picture_43_9.jpg" 

De la page Zip (1) man:

-d
--delete
Supprimer (supprimer) des entrées d’une archive Zip. Par exemple:

Zip  -d  foo  foo/tom/junk  foo/harry/\*  \*.o

supprime l'entrée foo/tom/junk, tous les fichiers commençant par foo/harry/ et tous les fichiers se terminant par .o (quel que soit le chemin d'accès). Notez que l’extension du nom de chemin du shell a été inhibée avec des barres obliques inverses afin que Zip puisse voir les astérisques, ce qui permet à Zip de correspondre au contenu de l’archive Zip au lieu de le contenu du répertoire en cours. (Les barres obliques inverses ne sont pas utilisées sur les plates-formes MSDOS.) Peut également utiliser des guillemets pour échapper aux astérisques comme dans

Zip -d foo foo/tom/junk "foo/harry/*" "*.o"

Si vous n'échappez pas aux astérisques sur un système où Shell développe des caractères génériques, les astérisques sont convertis en une liste de fichiers dans le répertoire en cours et cette liste est utilisée pour supprimer des entrées de l'archive.

Sous MSDOS, -d est sensible à la casse lorsqu'il correspond aux noms figurant dans l'archive Zip. Cela nécessite que les noms de fichiers soient entrés en majuscules s'ils ont été compressés par PKZIP sur un système MSDOS. (Nous avons envisagé de rendre cette casse non sensible sur les systèmes où les chemins d'accès étaient insensibles à la casse, mais il est possible que l'archive provienne d'un système où la casse est importante et qu'elle pourrait inclure les deuxBaretbarsous forme de fichiers séparés dans l’archive.) Mais voyez la nouvelle option -ic pour ignorer la casse dans l’archive.

90
jaypal singh