2011-04-17 11 views
57

Estoy trabajando en un script de copia de seguridad y quieren manchar a un directorio de archivos:¿Cómo identifico un directorio sin conservar la estructura del directorio?

tar czf ~/backup.tgz /home/username/drupal/sites/default/files 

Este alquitranes hacia arriba, pero cuando desempaquetar el archivo resultante, que incluye la estructura de archivos completa: los archivos están en home/username/drupal/sites/default/files.

¿Hay alguna forma de excluir los directorios principales, de modo que el archivo resultante solo conozca el último directorio (files)?

Respuesta

23
cd /home/username/drupal/sites/default/files 
tar czf ~/backup.tgz * 
+16

También puede utilizar la opción -C de alquitrán. – GuruM

+5

cd no se recomienda y es propenso a errores, p. grandes scripts o makefiles. La respuesta a continuación es usable y correcta en general. – Gregor

138

Utilice la opción --directory:

tar czf ~/backup.tgz --directory=/home/username/drupal/sites/default files 
+0

¿Qué sucede si quiero poner 2 directorios aquí? –

+0

@ user3352668 simplemente agregue dos directorios. P.ej. si el valor predeterminado contiene "archivos" y "más archivos", simplemente agregue "morefiles" a la cadena de nbt. Por cierto: La mejor solución es nbt, debería ser la respuesta aceptada – Anonymous

+2

** - C DIR ** es lo mismo que ** - directory = DIR **, cambia de directorio a DIR – Markus

0
tar -Cczf ~/backup.tgz /home/username/drupal/sites/default/files 

-C qué el cd para usted

+0

Esto no funcionará. Vea las soluciones de MaikoID y Neil Butterworth. – Vincent

+1

'-C' funciona, pero tiene que ser utilizado como' -C

file1 file2 ... ' – vyom

30

Hola tengo una mejor solución cuando ingrese en el directorio especificado que es imposible (Makefiles, etc.)

tar -cjvf files.tar.bz2 -C directory/contents/to/be/compressed . 

¡No olvides el punto (.) Al final!

+0

** - C DIR ** es lo mismo que ** - directory = DIR **, cambia de directorio a DIR – Markus

+2

What qué hace el punto al final? –

+1

@BruceSun El ** - C ** cambia su directorio de trabajo. El punto le dice a tar qué directorio desea archivar (es decir, el directorio de trabajo actual). – user12345

1

Para GUNZIP todos los archivos .txt (* .txt) de /home/myuser/workspace/zip_from/ a /home/myuser/workspace/zip_to/ sin estructura de directorios de archivos de código Utilizar comando siguiente:

tar -P -cvzf /home/myuser/workspace/zip_to/mydoc.tar.gz --directory="/home/myuser/workspace/zip_from/" *.txt 
+0

Tienes [5 años de retraso] (https://stackoverflow.com/a/5696001/102441)! – Eric

Cuestiones relacionadas