En mi directorio actual, tengo dos subdirectorios:
dir_1/
- file1.png
- file2.png
...
- fileN.png
dir_2/
- fileA.txt
- ...
- fileZ.txt
Cuando comprimo tar los dos directorios de la siguiente manera:
tar -cvzf result.tar.gz dir_1/ dir_2/
Obtuveresultado.tar.gzpero mantiene la estructura del directorio. Quiero decir cuando extraigo elresultado.tar.gz, obtuve dir_1
y dir_2
otra vez.
¿Cómo puedo comprimir tar para que no se mantenga la estructura del directorio, lo que significa que cuando extraigo el archivo tar.gz, solo obtengo archivos?
result/
file1.png
...
fileN.png
fileA.txt
...
fileZ.txt
Respuesta1
Creo que puedes hacer esto con la -C
opción.
Desde la página de manual de tar:
-C directory, --cd directory, --directory directory
In c and r mode, this changes the directory before adding the following files.
In x mode, change directories after opening the archive but before extracting
entries from the archive.
Esto significa que deberías poder ejecutar
tar cvzf result.tar.gz -C /path/to/dir1/ . -C /path/to/dir2/ .
para lograr lo que deseas.
Respuesta2
Con GNU tar, puede usar la --transform
opción de reescribir nombres de archivos al agregarlos o extraerlos de un archivo. Con BSD tar o con pax, la opción -s
hace lo mismo.
Para eliminar el componente del directorio principal (para que dir_1/subdir/somefile
se almacene como subdir/somefile
):
tar -czf result.tar.gz --transform '!^[^/]*/!!' dir_1 dir_2
Para eliminar todos los componentes del directorio (para que dir_1/subdir/somefile
se almacenen como somefile
):
tar -czf result.tar.gz --transform '!^.*/!!' dir_1 dir_2