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?

Martín
fuente

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

Stephen Kitt
fuente
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.

muru
fuente
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.

janos
fuente