¿Tar -xvf elimina los archivos existentes del directorio?

10

Tengo un archivo tar y quiero usar tar -xvf.
En este archivo tar tengo un árbol de directorios que contiene un par de archivos. En mi sistema solaris 10, este árbol de directorios ya existe y tiene varios archivos.
Si desempaquete el archivo, ¿se sobrescribe todo el árbol de directorios o solo se sobrescriben los archivos contenidos en el archivo?
¿Se eliminarán los archivos que no tienen un corresponsal en el archivo?

Felicia
fuente
Siempre puede crear un .tar de prueba y un directorio de prueba y probarlo ... una respuesta que se le ocurra durará mucho más en su mente que una respuesta dada por cualquiera aquí.
Jarvin
La respuesta es no. Si piensa lo suficiente, se dará cuenta de que no tiene ningún sentido que un programa para extraer archivos de un archivo elimine archivos completamente no relacionados.
Fosco

Respuestas:

6

Los archivos duplicados que ya existen pueden o no descomprimirse y sobrescribirse según su sistema. Sin embargo, generalmente lo hace por defecto. Los archivos que están en el archivo pero no en su sistema simplemente se agregarán a directorios nuevos o existentes en su sistema.

Dir /test

/1/a
c

Archivo test.tar

/1/b
d

probablemente se fusionará para:

/1/a
/1/b
c
d

Agregar la -kbandera al comando tar asegurará que ninguno de los archivos en su directorio de destino se sobrescribirá:

tar -xvkf test.tar
BloodPhilia
fuente
@BP: la sobrescritura puede depender de la shell ya que csh (¿todavía la shell predeterminada en Sun?) Tenía una variable de shell "noclobber" que, cuando se configura, evita el comportamiento de sobrescritura accidental.
hotei
Gracias BloodPhilia y hotei. He realizado una prueba en mi sistema y tar -xvf sobrescribe los archivos que ya existen y agrega los que no existen. Lo que me gustaría saber es si existe la posibilidad de que se sobrescriba un directorio completo y, por lo tanto, pierda los archivos que estaban en mi sistema en ese directorio pero que no estaban en el archivo. Por ejemplo: tengo en dir.tar dir / file2. En mi sistema tengo dir / file1, dir / file2 y dir / file3. ¿Es posible que si realizo tar -xvf dir.tar, todo el directorio se sobrescribirá y ya no contendrá file1 y file3?
Felicia
@hotei: noclobber(que también existe en shells POSIX por cierto) solo afecta a los archivos redirigidos a >fooen el shell. No tiene efecto sobre el alquitrán.
Gilles 'SO- deja de ser malvado'
@hotei noclobber le impide sobrescribir archivos mediante la redirección en el shell. Por echo foo > bar.txtlo tanto , no sobrescribirá bar.txt si existe. No tiene ningún efecto sobre lo que sobrescribirá un programa, como tar.
KeithB
1
@Felicia: Según Single Unix, tar no borrará los archivos que no estaban en el archivo. Sobrescribirá los archivos existentes con los contenidos (pero no los modos) del archivo. Puede haber alquitranes no compatibles, pero dudo que alguno de ellos sobrescriba archivos no relacionados como dir/file1.
Gilles 'SO- deja de ser malvado'
0

La forma más fácil es crear un directorio nuevo y vacío, crear un CD y extraer los archivos allí. Sin embargo, debe tener cuidado de que los archivos extraídos sean relativos (comience con ./) y no absolutos (comience con /). Canalice la tabla de contenido a través de less para ver cuál es el caso si no sabe (tar -tvf tar_filename | less)

Puede averiguar si su versión tar sobrescribe de forma predeterminada o no mirando la página de manual. Tar no eliminará archivos durante la extracción, que es otra razón por la cual las personas generalmente comienzan desde un directorio nuevo y vacío antes de hacer el extracto.

hotei
fuente