Estoy .tar
ing algunos archivos con la ruta example/super_user/Output.*
.
El resultado se .tar
ve así:
+ example
+ super_user
- Output.zip
- Output.xml
- Output.txt
Pero quiero que el archivo sea como el siguiente:
- Output.zip
- Output.xml
- Output.txt
¿Sabes cómo puedo lograr esto mientras sigo en otro directorio?
unix
compression
tar
Der Hochstapler
fuente
fuente
Respuestas:
tar preservará la estructura de archivos y carpetas, así que no creo que haya ninguna forma de instruir a tar para aplanar la jerarquía en el momento de la creación.
Una solución alternativa es cambiar temporalmente el directorio, crear el tar y luego regresar, un ejemplo rápido a continuación:
fuente
Si el directorio 'ejemplo' está en la raíz del sistema de archivos, aquí hay otra forma:
esto cambiará el directorio al punto en el que desea hacer el tar. La advertencia es que si hay subdirectorios en / example / super_user, la estructura de directorios se conservará para estos subdirectorios.
fuente
/home/u/foo/bar
, el directorio de trabajo lo es/home/b
, entoncestar -C foo/bar -cvf qiz.tar .
funciona bien. Sin embargo, una advertencia es que no puede usar comodines, es decirtar -C foo/bar -cvf qiz.tar *.log
,tar -C foo/bar -cvf qiz.tar "*.log"
otar -C foo/bar -cvf qiz.tar "foo/bar/*.log"
no funcionará.-C
varias veces en un solotar
comando si necesita agregar varios archivos distribuidos en varios directorios pero aún así desea que el archivo tar sea plano.He publicado mi respuesta aquí:
/programming/13924856/unix-tar-do-not-preserve-directory-structure
repost (para personas perezosas)
Esto es feo ... pero funciona ...
Tuve este mismo problema, pero con varias carpetas, solo quería aplanar todos los archivos. Puede usar la opción "transformar" para pasar una expresión sed y ... funciona como se esperaba.
Esta es la expresión:
's/.*\///g'
(eliminar todo antes de '/')Este es el comando final:
fuente
Para crear un tar (ARCHIVE.tar) con todos los archivos de un directorio (DIR), sin ninguna información del directorio principal (ni siquiera ./), puede usar algo como:
Puedes jugar con la búsqueda para limitar la profundidad, seleccionar archivos específicos y muchas otras cosas.
¡Buena suerte!
fuente
-printf
Es un comando no estándar. Muchos de esos solo funcionan con versiones específicas de find. Por lo general, los marcamos al responder a una pregunta sobre el Super Usuario (por ejemplo, con "-blah es una extensión de GNU y no funcionará en todas partes").Creé un directorio temporal. Y en el directorio, se crearon enlaces simbólicos a todos los archivos a los archivos que se incluirán. Luego hice tar -h -C. para que todos los archivos (no enlaces, sino su contenido) se incluyan en el archivo con el nombre deseado.
fuente
Si ese es el contenido completo del tarball, puede usar la
--strip-components
opción GNU tar para eliminar los 2 niveles antes de los archivos.fuente
--strip-path
pero usarla no cambiará nada.Otra forma de cambiar temporalmente el directorio es poner los comandos
cd
ytar
dentro del paréntesis(
)
:La ventaja de esto es que siempre volverá a aparecer implícitamente en el directorio original cuando finalice el bloque. es decir, no es necesario
pushd
...popd
bloques o hacer un seguimiento de dóndecd
volver.fuente
pushd empuja la ruta del directorio actual a la
DIR
pila y se mueve a la carpeta de contenido. Luego, vuelve al directorio original utilizandopopd
.fuente