Pregunta

Escenario: tengo un directorio en un servidor que aloja mi sitio web que contiene cientos de imágenes enviadas por los usuarios. Estoy creando un script de respaldo que toma todas las imágenes del directorio y las comprime en un archivo .tar.gz. El comando que tengo hasta ahora es:

tar -czpf /path/to/backups/my_backup.tar.gz ruta / a / images /

Problema: No dentro de mi ruta / a / images / Tengo un directorio llamado tmp /. Cuando ejecuto el comando, obtengo un archivo .tar.gz que contiene toda la imagen en la ruta / al directorio / images / y un subdirectorio llamado tmp /.

Pregunta: ¿Cómo puedo hacer que el comando omita / no incluya el subdirectorio tmp / en el archivo .tar.gz?

Un millón de gracias de antemano.

¿Fue útil?

Solución

Está buscando el argumento --exclude.

--exclude=PATTERN

Algunos usuarios encuentran exclude opciones confusas. Aquí hay algunas trampas comunes:

  • El modo operativo principal de tar no actúa en el nombre de una ruta listado explícitamente en la línea de comando si uno de sus nombres de archivo Los componentes están excluidos. En el ejemplo anterior, si crea un archivar y excluir archivos que terminan con *.o, pero explícitamente nombrar el archivo dir.o/foo después de que se hayan enumerado todas las opciones, --exclude=PATTERN será excluido del archivo.

  • A veces puedes confundir los significados de --exclude-from=FILE-OF-PATTERNS y -X FILE-OF-PATTERNS (*). Ser cuidado: use regexp cuando los archivos a excluir son dado como un patrón en la línea de comando. Utilizar <=> para introducir el nombre de un archivo que contiene una lista de patrones, uno por línea; cada uno de estos los patrones pueden excluir cero, uno o muchos archivos.

  • Cuando use <=>, asegúrese de citar el PATRÓN parámetro, por lo que GNU <=> ve caracteres comodín como <=>. Si tu no hagas esto, el shell puede expandir el <=> mismo usando archivos a mano, por lo que <=> podría recibir una lista de archivos en lugar de uno patrón, o ninguno en absoluto, lo que hace que el comando sea algo ilegal. Esto podría no corresponder a lo que desea.

Por ejemplo, escriba:

$ tar -c -f ARCHIVE.TAR --exclude '*.o' DIRECTORY

en lugar de:

$ tar -c -f ARCHIVE.TAR --exclude *.o DIRECTORY
  • Debe usar la sintaxis de shell, o globbing, en lugar de <=> sintaxis, cuando se usan las opciones de exclusión en <=>. Si intentas usar <=> sintaxis para describir los archivos que se excluirán, su comando podría fallar.

Otros consejos

tar -czpf /path/to/backups/my_backup.tar.gz --exclude path/to/images/tmp path/to/images/

Esto debería funcionar (suponiendo GNU tar):

tar -czpf /path/to/backups/my_backup.tar.gz --exclude=tmp path/to/images/
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top