tar: Cómo crear un archivo tar con directorios iniciales arbitrarios sin 'cd'ing al directorio padre

23

Digamos que tengo un directorio de archivos en

/home/user1/dir1

y quiero crear un tar con solo "dir1" como el directorio principal:

/dir1/file1
/dir1/file2

Sé que primero puedo cd al directorio

cd /home/user1/
tar czvf dir1.tar.gz dir1

Pero al escribir scripts, saltar de un directorio a otro no siempre es favorable. Me pregunto si hay una manera de hacerlo con rutas absolutas sin cambiar los directorios actuales.

Sé que siempre puedo crear un archivo tar con rutas absolutas DENTRO y usar

--strip-components 

al extraer, pero a veces los nombres de ruta adicionales son información privada adicional que no desea distribuir con sus archivos tar.

¡Gracias!

Yan
fuente

Respuestas:

24

tar -C cambia el directorio

tar -C /home/user1/ -cvzf dir1.tar.gz dir1

por cierto, uno práctico para realizar un seguimiento de los cambios de directorios ... use pushd y popd.

pushd .
cd /home/user1
tar cvfz dir1.tar.gz
popd
Philip Reynolds
fuente
1
Gracias. No sabía que la opción "-C" debía usarse antes que otras opciones ... Intenté "tar -cvzf dir1.tar.gz dir1 -C / home / user1 /" antes pero no funcionó.
Yan
1
No funciona: tar: dir: No se puede generar estadística: No existe tal archivo o directorio (suponiendo que dir1 está en / home / user1 /)
tribbloid
21

Con gnu tar, puede crear un archivo con un directorio base diferente al actual con:

tar -c --transform 's,^\.,mybasedir,' .

Simplemente adapte la expresión sed a sus necesidades.

Christophe Drevet-Droguet
fuente
5

OK, también descubrí que

tar -czvf file1.tar.gz /home/user1/dir1/../dir1

También funcionó como yo quería.

Yan
fuente
Aunque los comodines como "*" no funcionan
Curtis Yallop
2
tar -C /home/user1/dir -c .
Michael Graff
fuente