¿Cómo sobrescribir el archivo zip existente en lugar de actualizarlo en Info-Zip?


30

Para obtener un archivo zip nuevo al igual que lo hace tar, ¿debo realizarlo rm foo.zipantes de ejecutarlo zip?

$ mkdir foo; touch foo/bar
$ zip -r foo.zip foo
  adding: foo/ (stored 0%)
  adding: foo/bar (stored 0%)
$ rm foo/bar; touch foo/baz
$ zip -r foo.zip foo
  adding: foo/ (stored 0%)
  adding: foo/baz (stored 0%)
$ unzip -l foo.zip
Archive:  foo.zip
  Length      Date    Time    Name
---------  ---------- -----   ----
        0  2011-10-27 07:49   foo/
        0  2011-10-27 07:49   foo/bar
        0  2011-10-27 07:49   foo/baz
---------                     -------
        0                     3 files

Respuestas:


32

Use la opción -FS para "sincronizar archivos"

zip -FSr foo.zip foo

Esto agregará todos los archivos nuevos en la carpeta al zip y eliminará cualquier archivo del zip que no esté en la carpeta.


¿Qué versión de zip tiene esta opción? Mi comando zip no reconoce "-S"
Jayan

2
El interruptor -FSno es -Fy -Sjuntos. Esto ha estado allí desde zip 3.0 al menos. Compruebe man zip.
Paul

¿Cómo se define "nuevo archivo"? ¿Sus cambios de tamaño de archivo, fecha de modificación, ambos? Simplemente curioso
Moseleyi

Esto simplemente funciona Zip 3.0y no funciona Zip 2.32(no eliminó los archivos antiguos en el paquete zip)
Nabi KAZ

¿Quieres decir -FS -rverdad?
avalancha1

0

Una alternativa al uso de la -FSopción (o eliminar el antiguo archivo ZIP), y literalmente sobrescribir el archivo ZIP existente, es solicitar la zipsalida a stdin y redirigir la salida al archivo de su elección:

zip -r - foo >foo.zip

Si existe foo.zip, se sobrescribirá mediante la redirección de shell, lo que significa que obtendrá un nuevo archivo ZIP nuevo el 100% del tiempo, cada vez 🙂


Te refieres a la salida a stdout
flarn2006
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.