root@server # tar fcz bkup.tar.gz /home/foo/
tar: Removing leading `/' from member names
¿Cómo puedo resolver este problema y mantener los /
nombres en los archivos?
-C /
al extraerlo.
root@server # tar fcz bkup.tar.gz /home/foo/
tar: Removing leading `/' from member names
¿Cómo puedo resolver este problema y mantener los /
nombres en los archivos?
-C /
al extraerlo.
Respuestas:
Use la opción --absolute-names
o -P
para deshabilitar esta función.
tar fczP bkup.tar.gz /home/foo/
tar fcz bkup.tar.gz --absolute-names /home/foo
-C /
opción como se describe en la respuesta de @Marcus eliminará el mensaje STDERR si ese es su objetivo principal.
Eso es en realidad una característica, no un problema. Los archivos con ubicaciones absolutas son un riesgo de seguridad. Los atacantes podrían usar dichos archivos para engañar a los usuarios para que instalen archivos en ubicaciones críticas del sistema.
Sí, podrías usarlo -P
. Pero, ¿qué tiene de malo permitir que tar elimine la barra diagonal y simplemente requerir que el usuario del archivo haga la extracción explícitamente en el directorio raíz? Entonces están afectando conscientemente las ubicaciones críticas del sistema, y no pueden hacerlo por accidente.
tar
. Este mensaje en particular estaba causando tar
que saliera con un estado de 1
, lo que estaba causando que recibiera alertas de correo electrónico falsas sobre copias de seguridad exitosas, simplemente porque tar
estaba escribiendo este mensaje en STDERR. Solucioné este problema usando mi propia versión modificada de la solución de cd /path/to/network/share && tar -cJf scripts.backup.tar.xz -C / home/user/scripts 2>/dev/null || [send an email alert]
-P
, por ejemplo, si proporciona algún tipo de función de captura de imágenes del sistema de archivos en FUSE. En ocasiones, es posible que desee descomprimir una instantánea en un directorio específico en lugar de cwd
desde la perspectiva del usuario.
Si desea deshacerse de "Eliminar los principales '/' de los nombres de los miembros 'que se imprimen en STDERR, pero aún así desea omitir esas barras inclinadas como lo hace sabiamente el alquitrán por defecto, vi una excelente solución aquí por el comentarista timsoft.
La solución implica usar la opción -C para cambiar el directorio a la raíz (/), luego especificar el árbol de archivos para archivar sin una barra inclinada, porque ahora solo necesita una ruta relativa. Esto hace lo mismo que un comando normal de creación de tar, pero no se necesita quitar:
tar fcz bkup.tar.gz -C / home/foo/
tar c -C / home/foo/*
), porque el shell no sabe acerca de la raíz modificada. Pero sigue siendo una buena respuesta para otros casos.
-C /
no me funciona, punto. No previene el stderr para mí.
Un mes tarde, pero encontré que la solución más adecuada para mi caso (en un script de shell) es ir al directorio principal y ejecutar el comando allí.
cd /var/www/
tar -czf mysite.gz mysite
En lugar de:
tar -czf /var/www/mysite.gz /var/www/mysite
Esta es la forma en que lo hice usando el método de fuerza bruta: 2>&1 | grep -v "Removing leading"
.
Por ejemplo:
tar -cf "$BKUPDIR/${BKUPFILE}.tar" --overwrite --exclude '.*' --one-file-system "$SRCDIR" 2>&1 | grep -v "Removing leading"
tar
comando puede devolver 2
un error fatal.
Resolví este problema con:
cd /home/foo && tar czf ~/backup.tar.gz .
de esa manera no estás tratando de poner rutas absolutas en el archivo tar en primer lugar. Si desea descomprimirlo en la raíz del sistema de archivos, simplemente
cd / && tar xzf backupt.tar.gz
después de transferirlo.