Tengo el siguiente comando en la parte de un script de shell de respaldo:
tar -cjf site1.bz2 /var/www/site1/
Cuando enumero el contenido del archivo, obtengo:
tar -tf site1.bz2
var/www/site1/style.css
var/www/site1/index.html
var/www/site1/page2.html
var/www/site1/page3.html
var/www/site1/images/img1.png
var/www/site1/images/img2.png
var/www/site1/subdir/index.html
Pero me gustaría eliminar la parte /var/www/site1
del directorio y los nombres de archivo dentro del archivo, para simplificar la extracción y evitar una estructura de directorio constante inútil. Nunca se sabe, en caso de que extraiga sitios web respaldados en un lugar donde no se almacenaron los datos web /var/www
.
Para el ejemplo anterior, me gustaría tener:
tar -tf site1.bz2
style.css
index.html
page2.html
page3.html
images/img1.png
images/img2.png
subdir/index.html
Entonces, cuando extraigo, los archivos se extraen en el directorio actual y no necesito mover los archivos extraídos después, y así se preservan las estructuras del subdirectorio.
Ya hay muchas preguntas sobre el alquitrán y la copia de seguridad en stackoverflow
y en otros lugares de la web, pero la mayoría de ellas solicitan que se elimine toda la estructura del subdirectorio (aplanamiento), o simplemente agregue o elimine la inicial / en los nombres (no lo hago ' No sé qué cambia exactamente cuando se extrae), pero no más.
Después de leer algunas de las soluciones encontradas aquí y allá, así como el manual, probé:
tar -cjf site1.bz2 -C . /var/www/site1/
tar -cjf site1.bz2 -C / /var/www/site1/
tar -cjf site1.bz2 -C /var/www/site1/ /var/www/site1/
tar -cjf site1.bz2 --strip-components=3 /var/www/site1/
Pero ninguno de ellos funcionó como yo quiero. Algunos no hacen nada, otros ya no archivan subdirectorios.
Está dentro de un script de shell de respaldo lanzado por un Cron, por lo que no sé bien, qué usuario lo ejecuta, cuál es la ruta y el directorio actual, por lo que siempre se requiere escribir una ruta absoluta para todo, y preferiría no cambiar el directorio actual para evitar romper algo más en el script (porque no solo respalda sitios web, sino también bases de datos, luego envía todo eso a FTP, etc.)
¿Cómo lograr esto?
¿Acabo de entender mal cómo funciona la opción -C?
-C
solo significa "cambiar directorio", mientras que la sustitución de una ruta (o prefijo) solo puede hacerse mediante --transform
. rif. superuser.com/questions/595510/prepend-prefix-in-tar/595512 puede simplemente -C (cambiar directorio) y --transformarlo: `` `tar cjf site1.bz2 --transform" s / ^ \. \ // $ targetbase / "-C / var / www / site1. ``