Remove um único arquivo do arquivo zip no Linux

60

Eu tenho um arquivo zip (criado automaticamente em um script com -j -r flags) e gostaria de remover um único arquivo dele. Eu tentei como documentado.

zip -d "picture_43_9.jpg" gallery.zip

mas recebo este erro:

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

De qualquer forma, existe esse arquivo dentro do arquivo e não está vazio:

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

Alguma idéia do que estou fazendo errado?

    
por Alex Flo 27.05.2013 / 09:45

1 resposta

81

Você tem os argumentos trocados. Tente isto:

zip -d gallery.zip "picture_43_9.jpg" 

Na página do manual zip (1) :

-d
--delete
Remove (delete) entries from a zip archive. For example:

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

will remove the entry foo/tom/junk, all of the files that start with foo/harry/, and all of the files that end with .o (in any path). Note that shell pathname expansion has been inhibited with backslashes, so that zip can see the asterisks, enabling zip to match on the contents of the zip archive instead of the contents of the current directory. (The backslashes are not used on MSDOS-based platforms.) Can also use quotes to escape the asterisks as in

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

Not escaping the asterisks on a system where the shell expands wildcards could result in the asterisks being converted to a list of files in the current directory and that list used to delete entries from the archive.

Under MSDOS, -d is case sensitive when it matches names in the zip archive. This requires that file names be entered in upper case if they were zipped by PKZIP on an MSDOS system. (We considered making this case insensitive on systems where paths were case insensitive, but it is possible the archive came from a system where case does matter and the archive could include both Bar and bar as separate files in the archive.) But see the new option -ic to ignore case in the archive.

    
por 27.05.2013 / 09:55

Tags