2009-06-27 8 views
5

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:

alquitrán -czpf trayectoria /path/to/backups/my_backup.tar.gz/a/images/

Problema: No se 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 el directorio path/to/images/y un subdirectorio llamado tmp /.

Pregunta: ¿Cómo puedo obtener el comando para omitir/no incluir el subdirectorio tmp/en el archivo .tar.gz?Comando Linux tar: compresión de un directorio pero con subdirectorios

Gracias un millón por adelantado.

Respuesta

12

Usted está buscando el argumento --exclude.

--exclude=PATTERN 

Algunos usuarios encuentran exclude opciones confusas. Aquí están algunos errores comunes:

  • El modo de funcionamiento principal del tar no actúa sobre un nombre de ruta aparece explícitamente en la línea de comandos si uno de su nombre de archivo se excluye componentes. En el ejemplo anterior, si crea un archivo y excluye archivos que terminan con *.o, pero explícitamente el nombre después de que se hayan enumerado todas las opciones, dir.o/foo se excluirán del archivo.

  • A veces se puede confundir los significados de --exclude=PATTERN y --exclude-from=FILE-OF-PATTERNS (-X FILE-OF-PATTERNS). Sea cuidado: use --exclude=PATTERN cuando los archivos que se van a excluir son indicados como un patrón en la línea de comando. Use --exclude-from=FILE-OF-PATTERNS para introducir el nombre de un archivo que contiene una lista de patrones, uno por línea; cada uno de estos patrones puede excluir cero, uno o muchos archivos.

  • Cuando se utiliza --exclude=PATTERN, asegúrese de citar el parámetro PATRÓN , por lo GNU tar ve caracteres comodín como *. Si no hace esto, el shell podría expandir el * utilizando los archivos , por lo que tar podría recibir una lista de archivos en lugar de un patrón , o ninguno, haciendo el comando algo ilegal. Esto podría no corresponderse con 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 utilizar el uso de sintaxis concha, o comodines, en lugar de regexp sintaxis, al utilizar excluye opciones en tar. Si intenta utilizar la sintaxis regexp para describir los archivos que se excluirán, su comando podría fallar.
+0

Gracias por la respuesta. Tienes mucha razón en que --excluir puede ser un poco confuso. No lo entendí al 100% hasta que leí tus explicaciones. Gracias – VinkoCM

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

Esto debería funcionar (suponiendo GNU tar):

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