Cómo tarar varias carpetas, algunas de forma recursiva y otras de forma no recursiva

Cómo tarar varias carpetas, algunas de forma recursiva y otras de forma no recursiva

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- Crear
  • v- Detallado (veamos qué está pasando)
  • f- el nombre de archivo que queremos, en nuestro casoarchive.tar
  • archive.tar- ese argumento real para nuestro fcambio
  • dir1- 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 de dir2)
  • -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í es r. Esta es nuestra opción de agregar. Se suma a nuestro archive.taral final. No debe confundirse con la Aopció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.ejarchive.tar <stdinput>

Tercer comando:

tar rvf archive.tar dir3/file1

Agregar a archive.tarun solo archivo ( file1) de dir3.

Y finalmente, cómo se ve el alquitrán después de su creación. La topció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
$

información relacionada