![Cómo tarar varias carpetas, algunas de forma recursiva y otras de forma no recursiva](https://rvso.com/image/1597819/C%C3%B3mo%20tarar%20varias%20carpetas%2C%20algunas%20de%20forma%20recursiva%20y%20otras%20de%20forma%20no%20recursiva.png)
Tengo una lista de directorios. Algunos de los directorios requieren que se taren de forma recursiva, otros solo requieren el archivo que existe en ese directorio, no subdirectorios: usando el directorio/archivos a continuación como ejemplo, ¿cómo se vería mi comando tar?
/tmp/dir1/ - Recursively
/tmp/dir2/ - Only the files that exist in that directory, no subdirectories
/tmp/dir3/file1 - Only this single file.
Respuesta1
Esto es lo que se me ocurrió:
Primero, la estructura de directorios que estoy usando como ejemplo:
$ find dir1 dir2 dir3 -print
dir1
dir1/file1
dir1/file2
dir1/sub_dir1
dir1/sub_dir1/file1
dir2
dir2/file1
dir2/file2
dir2/sub_dir1
dir2/sub_dir1/file1
dir3
dir3/file1
$
A continuación, mi solución que consta de tres comandos:
Primer comando:
tar cvf archive.tar dir1
Bastante estándar. Vamos a dividirlo:
c
- Crearv
- Detallado (veamos qué está pasando)f
- el nombre de archivo que queremos, en nuestro casoarchive.tar
archive.tar
- ese argumento real para nuestrof
cambiodir1
- lo que realmente queremos ensuciar
Segundo comando:
find dir2 -maxdepth 1 -type f -print0 | xargs -0 tar rvf archive.tar
Vamos a dividirlo:
find dir2
- Donde queremos encontrar para buscar.-maxdepth 1
- No bajes más allá de una profundidad de 1 (quédate en la raíz dedir2
)-type f
- Buscar archivos-print0
- No imprima un carácter de nueva línea al final; en su lugar, utilice un carácter nulo. Esto nos ayuda si Find encuentra archivos con espacio en ellos.| xargs -0
- La entrada estándar que encontramos con el comando buscar se lanza aquí para ser ejecutada respetando nuestraprint0
tar rvf
- El único interruptor nuevo aquí esr
. Esta es nuestra opción de agregar. Se suma a nuestroarchive.tar
al final. No debe confundirse con laA
opción específica para agregar archivos adicionales (.tar
-s).archive.tar
- El alquitrán al que queremos agregar.El final de este comando es donde se utiliza nuestra entrada estándar. p.ej
archive.tar <stdinput>
Tercer comando:
tar rvf archive.tar dir3/file1
Agregar a archive.tar
un solo archivo ( file1
) de dir3
.
Y finalmente, cómo se ve el alquitrán después de su creación. La t
opción se utiliza para imprimir su contenido.
$ tar tvf archive.tar
drwxrwxr-x mmallard/mmallard 0 2019-07-18 16:02 dir1/
-rw-rw-r-- mmallard/mmallard 0 2019-07-18 16:01 dir1/file1
-rw-rw-r-- mmallard/mmallard 0 2019-07-18 16:01 dir1/file2
drwxrwxr-x mmallard/mmallard 0 2019-07-18 16:02 dir1/sub_dir1/
-rw-rw-r-- mmallard/mmallard 0 2019-07-18 16:02 dir1/sub_dir1/file1
-rw-rw-r-- mmallard/mmallard 0 2019-07-18 16:02 dir2/file1
-rw-rw-r-- mmallard/mmallard 0 2019-07-18 16:02 dir2/file2
-rw-rw-r-- mmallard/mmallard 0 2019-07-18 16:02 dir3/file1
$