¿Cómo se verifica un archivo tar que ya está escrito?

15

Sé que puede hacer -W al crear un archivo, pero ¿cómo verifica un archivo ya creado? tvWf dice que no es un archivo tar válido?

$ mkdir tmp
$ echo asdkfjh > tmp/a
$ echo qweroiu > tmp/b
$ ls
tmp
$ tar cvf archive.tar tmp
tmp/
tmp/a
tmp/b
$ tar tvWf archive.tar
tar: This does not look like a tar archive
tar: Skipping to next header
tar: VERIFY FAILURE: 1 invalid header detected
tar: Error exit delayed from previous errors

Lo mismo sucede con tar 1.15 (que es el valor predeterminado del sistema en centos 5) y 1.26 (que es la versión más nueva de gnu).

cespinoza
fuente

Respuestas:

8

No puedes usar Wcon t.

mkdir tmp
echo bdb > tmp/a
echo bdb > tmp/b

tar cvf archive.tar tmp
tmp/
tmp/a
tmp/b

ls -l archive.tar
-rw-r--r-- 1 tony tony 10240 Jun 23 05:57 archive.tar

tar tvf archive.tar
drwxr-sr-x tony/tony         0 2011-06-23 05:57 tmp/
-rw-r--r-- tony/tony         4 2011-06-23 05:57 tmp/a
-rw-r--r-- tony/tony         4 2011-06-23 05:57 tmp/b

tar tvWf archive.tar
tar: This does not look like a tar archive
tar: Skipping to next header
tar: Exiting with failure status due to previous errors

Creo que tsolo es suficiente para probar el archivo.

OchoBitTony
fuente
tsolo solo enumera el contenido del archivo. Quiero verificar que los archivos en el tar tengan el mismo contenido que los originales (todavía en el sistema de archivos), lo que pensé que era lo que Wdebería hacer (¿verdad?).
cespinoza
1
W hace eso solo cuando escribe el archivo. Si desea asegurarse de que el contenido sea byte por byte, deberá extraerlo en algún lugar y diferenciar / sumar los archivos.
EightBitTony
No es para mí: tar tvWf t.tar tar: --verify cannot be used with -t:tar (GNU tar) 1.27.1
Tom Hale
14

GNU tartiene una --compareopción. Consulte la sección Comparación de miembros del archivo con el sistema de archivos de la documentación para obtener más detalles.

jon
fuente
55
Por ejemplo tar -df /path/to/archive.tar.bz2, mostrará diferencias entre los archivos en el archivo y el sistema de archivos, resolviendo rutas relativas en el archivo contra el directorio de trabajo actual.
Walf
3

Joerg Schillings startiene una opción diff , que puede comparar archivos en un archivo tar con su original. Puede indicar lo que debe reconocerse como diferencia.

0 1 newt pts/1 ~ 17> :> tmp/testfile
0 1 newt pts/1 ~ 19> star -cz tmp > tmp.tar
0 1 newt pts/1 ~ 19> echo bla > tmp/testfile
0 1 newt pts/1 ~ 20> star -z -diff diffopts=not,times < tmp.tar
diffopts=perm,symperm,type,nlink,uid,gid,uname,gname,size,data,rdev,hardlink,symlink,sympath,sparse,dir,acl,xattr,fflags
tmp/testfile: different size,data
star: 115 blocks + 0 bytes (total of 1177600 bytes = 1150.00k).

Tenga en cuenta que se menciona testfilecomo de diferente tamaño y datos. Si no hubiera excluido los tiempos (¡incluido el tiempo de acceso!) También habría indicado el tiempo de acceso, y también enumeraría todos los archivos cuyos tiempos habían cambiado con solo mirarlos.

Desde la desaparición de BerliOS, starse puede encontrar en sourceforge . Es altamente portátil y se compila sin problemas en la mayoría de los sistemas unixoides y similares.

Tatjana Heuser
fuente
Las fuentes recientes están en el schilytoolspaquete fuente.
schily