Crear un archivo tar sin incluir el directorio principal cuando los archivos se almacenan en diferentes directorios


11

Tengo los siguientes cuatro archivos en el sistema de archivos:

/home/martin/cvs/ops/cisco/b/s1
/home/martin/cvs/ops/cisco/b/s2
/home/martin/cvs/ops/extreme/b/r3
/home/martin/cvs/ops/j/b/r5

Necesito poner esos archivos en un archivo tar, pero no quiero agregar directorios. Lo mejor que se me ocurrió fue:

tar -C ~/cvs/ops/ -czvf archive.tgz cisco/b/s1 cisco/b/s2 extreme/b/r3 j/b/r5

Esto todavía no es perfecto, porque cada archivo en el archivo tiene dos directorios de profundidad. ¿Hay una mejor manera? O es que simplemente tengo que copiar s1, s2, r3y r5archivos en un directorio y crear el archivo con tar -czvf archive.tgz s1 s2 r3 r5?

Respuestas:


17

Puede usar -Cvarias veces (moverse de un directorio a otro):

tar czvf archive.tar.gz -C /home/martin/cvs/ops/cisco/b s1 s2 -C ../../extreme/b r3 -C ../../j/b r5

Tenga en cuenta que cada -Copción se interpreta en relación con el directorio actual en ese punto (o simplemente puede usar rutas absolutas).


11

Si tiene la lista de archivos en un archivo, o puede generarlos usando un comando, puede usar un solo comando GNU tar:

tar cf foo.tar -T list-of-files --transform 's:.*/::'

La transformación todavía mantiene directorios, pero aplana el diseño por completo. Por lo tanto, necesita alguna forma de filtrar directorios, de ahí la necesidad de una lista de archivos.


8

Puede agregar archivos al archivo uno por uno:

tar cf /tmp/archive.tar -C /home/martin/cvs/ops/cisco/b s1
tar rf /tmp/archive.tar -C /home/martin/cvs/ops/cisco/b s2
tar rf /tmp/archive.tar -C /home/martin/cvs/ops/extreme/b r3
tar rf /tmp/archive.tar -C /home/martin/cvs/ops/j/b r5

Puede escribir esto para facilitarlo: para cada ruta, ejecute tar rfcon el directorio base como el valor para el -Cparámetro y el nombre de archivo base sin ruta para agregar.

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.