Actualmente lo hago en un shellscript de manera muy ineficiente:
cp -a $MYPATH /tmp/$VERSION
cd /tmp
tar cjf archive.tar.bz2 $VERSION
Quiero que todo esté contenido en el directorio llamado $ VERSION. ¿Hay alguna manera de hacerlo sin tener que copiar todo como en el script anterior?
tar cjf archive.tar.bz2 $MYPATH
?Respuestas:
La versión GNU de
tar
admite la--transform
opción (y su alias--xform
), podría usarla asíPor ejemplo, dado este árbol de directorios
El comando
producirá un archivo como
fuente
flags=r;
resuelve el problema como se menciona en stackoverflow.com/a/29661783/388803 .s/^a\//b\//
, la imagentar -t
fija se muestraa/
mientras todos los demás archivos están debajob/
; Supongo que esto es peligroso, y realmente no necesito protegerme contra algún otro archivo con el mismo prefijo que no sea un directorio en el archivo tar; así que no está bien la barra inclinada final, no me importaría saber la mejor manera de manejar el caso de laa/
transformación, pero noaa/
si fuera un hermano del nodo raíz.Para tar el directorio actual y agregar un prefijo, esto funcionó para mí:
fuente
Si puede escapar sin preservar los enlaces simbólicos dentro del árbol de archivos que está tratando, podría hacerlo
La
h
opción significa enlaces simbólicos de desreferencia, es decir, incluir el archivo o directorio al que apunta el enlace en lugar de simplemente registrar el hecho de que había un enlace simbólico y lo que señalaba.fuente
Para agregar un prefijo de directorio cómodamente, use un separador diferente al
/
del--transform
argumento, por ejemplo,+
o,
como en la respuesta de Andy.Entonces, para un caso más simple, tiene un montón de archivos en el directorio actual y no desea crear una tarbomb .
La sintaxis es
s+search+replace+
, y^
simplemente coincide con el inicio del nombre del archivo.Y ahora, solo para responder al OP, bueno, puede evitar copiar todo su directorio
/tmp
ejecutando:Alternativamente:
(enlace duro, evita problemas con enlaces simbólicos)
Los dos últimos se incluyeron por valor de entretenimiento, yo mismo me quedaría con la respuesta de toro2k.
fuente