Excluir directorio al crear un archivo .tar.gz

119

Tengo una /public_html/carpeta, en esa carpeta hay una /tmp/carpeta que tiene como 70 gb de archivos que realmente no necesito.

Ahora estoy tratando de crear una .tar.gzde /public_html/exclusión/tmp/

Este es el comando que ejecuté:

tar -pczf MyBackup.tar.gz /home/user/public_html/ --exclude "/home/user/public_html/tmp/" 

El tar todavía se está creando, y al hacer un ls -shpuedo ver que MyBackup.tar.gzya tiene alrededor de 30gb, y estoy seguro de que /public_html/sin él /tmp/no tiene más de 1GB de archivos.

¿Qué hice mal?

seguro
fuente
la -popción no tiene ningún significado en términos de la función de creación, ¿verdad?
Martin Schneider

Respuestas:

201

Intente eliminar el último / al final de la ruta del directorio para excluir

tar -pczf MyBackup.tar.gz /home/user/public_html/ --exclude "/home/user/public_html/tmp" 
Víctor Parmar
fuente
7
Para excluir la carpeta completa y su contenido: tar -pczvf MyBackup.tar.gz / home / user / public_html / --exclude "/ home / user / public_html / tmp / *"
Dr.jacky
Me pongo tar: Error exit delayed from previous errors.en macos
prayagupd
Obteniendo un tar de error: Eliminando el `/ '
inicial
2
No funciona, tuve que usar en --exclude="/home/user/public_html/tmplugar de--exclude "/home/user/public_html/tmp
Negro
1
Ignore mi comentario anterior, que ya no puedo editar: excludeprimero debe especificarse como stackoverflow.com/users/3904223/oussaka notes. Al menos eso es lo único que funcionó para mí
kghbln
46

Intente mover el --excludeantes de la inclusión.

tar -pczf MyBackup.tar.gz --exclude "/home/user/public_html/tmp/" /home/user/public_html/ 
Martín Algesten
fuente
Gracias, esto funcionó para mí en una vieja caja Ubuntu 14.04 LTS.
Jamsi
1
Necesitaba hacer esto en OS X también.
TheJacobTaylor
16

Sí, elimine el final /y (al menos en ubuntu 11.04) todas las rutas proporcionadas deben ser relativas o completas. No puede mezclar rutas absolutas y relativas en el mismo comando.

sudo tar -czvf 2011.10.24.tar.gz ./start-directory --exclude "home/user/start-directory/logs"

no excluirá el directorio de registros, pero

sudo tar -czvf 2011.10.24.tar.gz ./start-directory --exclude "./start-directory/logs"

trabajará

usuario
fuente
1
Trabaja para mí cuando elimino la ruta absoluta en el argumento de exclusión.
jruzafa
2
El consejo sobre la mezcla de rutas absolutas y relativas fue clave para mí aquí
Dmitri DB
12

El comando correcto para excluir directorio de la compresión es:

tar --exclude='./folder' --exclude='./upload/folder2' -zcvf backup.tar.gz backup/

Asegúrese de poner --exclude antes de los elementos de origen y destino .

y puede verificar el contenido del archivo tar.gz sin descomprimir:

tar -tf backup.tar.gz
Oussaka
fuente
3

Prueba esto

tar -pczvf advancedarts.tar.gz /home/user/public_html/ --exclude /home/user/public_html/tmp
Yogesh
fuente
2

También puede excluir más de uno usando solo uno --exclude. Como este ejemplo:

tar -pczf MyBackup.tar.gz --exclude={"/home/user/public_html/tmp","/home/user/public_html/data"} /home/user/public_html/

En --exclude=debe terminar el nombre del directorio sin /y debe estar entre MyBackup.tar.gz y / home / user / public_html /

La sintaxis es:

tar <OPTIONS> <TARBALL_WILL_CREATE> <ARGS> <PATH_TO_COMPRESS>
LozanoMatheus
fuente
2

La respuesta aceptada no funcionó para mí, ejecutando unxutils tar en Windows10. En cambio, tuve que poner los archivos / directorios para archivar como último parámetro, así:

tar -pczf MyBackup.tar.gz --exclude "/home/user/public_html/tmp/" /home/user/public_html/

Entonces funcionó.

user2081279
fuente
2

Esto funcionó para mí:

tar -zcvf target.tar.gz target/ --exclude="target/backups" --exclude="target/cache"
Negro
fuente
2

tar -pczf <target_file.tar.gz> --exclude /path/to/exclude --exclude /another/path/to/exclude/* /path/to/include/ /another/path/to/include/*

Probado en Ubuntu 19.10.

  1. El =después excludees opcional. Puede usar en =lugar de espacio después de la palabra clave excludesi lo desea.
  2. El parámetro excludedebe colocarse antes de la fuente.
  3. La diferencia entre usar el nombre de la carpeta (como el primero) o el * (como el segundo) es: el segundo incluirá una carpeta vacía en el paquete, pero el primero no.
scegg
fuente
-2

La opción de exclusión debe incluir el =signo y "no es obligatorio.

--exclude=/home/user/public_html/tmp
Ivan Avery Frey
fuente
1
"es obligatorio si la carpeta tiene espacio en el nombre
Negro