tgz create compress comando linux bash tar

linux - create - ¿Cómo excluyo las rutas absolutas para tar?



tgz linux (4)

Estoy ejecutando un script PHP que me proporciona las rutas absolutas de los archivos que quiero subir. Esta es la sintaxis que tengo:

tar -cf tarname.tar -C /www/path/path/file1.txt /www/path/path2/path3/file2.xls

Cuando lo desenredo, crea la ruta absoluta a los archivos. ¿Cómo obtengo Just /path con todo lo que hay debajo para mostrar?


Está utilizando incorrectamente el modificador -C , que se usa para cambiar directorios. Entonces, lo que debes hacer es:

tar -cf tarname.tar -C /www/path path/file1.txt path2/path3/file2.xls

o si desea empaquetar todo en /www/path do:

tar -cf tarname.tar -C /www/path .

Puede usar -C cambiar varias veces.


Para mí, lo siguiente funciona mejor:

tar xvf some.tar --transform ''s?.*/??g''

--transform argument es una regex de reemplazo para sed, a la que se alimenta cada filepath extraído. A diferencia de --strip-components , eliminará toda la información de ruta, no solo la cantidad fija de componentes.


Si desea eliminar los primeros n componentes principales del nombre de archivo, necesita strip-components . Entonces en tu caso, en la extracción, hazlo

tar xvf tarname.tar --strip-components=2

La página man tiene una lista de muchas opciones de tar , incluida esta. Algunas versiones anteriores del uso de tar --strip-path para esta operación en su lugar.


Si no sabe cuántos componentes hay en la ruta, puede intentar esto:

DIR_TO_PACK=/www/path/ cd $DIR_TO_PACK/.. tar -cf tarname.tar $(basename $DIR_TO_PACK)