¿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.