¿Cómo alquilo un directorio sin conservar la estructura del directorio?


82

Estoy trabajando en una secuencia de comandos de respaldo y quiero tar un directorio de archivos:

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

Esto lo empaqueta, pero cuando descomprimo el archivo resultante, incluye la estructura completa del archivo: los archivos están en formato home/username/drupal/sites/default/files.

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

Respuestas:


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

19
También puede utilizar la opción -C de tar.
GuruM

8
cd no se recomienda y es propenso a errores, por ejemplo, grandes scripts o archivos Make. La respuesta a continuación es utilizable y correcta de manera más general.
Gregor

Lo intentó -Cy --directoryno funcionó para mí en Ubuntu 16.04. Esta es la única opción que funciona.
haxpor

Esta es la única opción que funciona -C agregar un. carpeta raíz, que no es lo que queremos.
Nicolas Dorier

165

Utilice la opción --directory:

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

1
¿Qué pasa si quiero poner 2 directorios aquí?
Shanpei Zhou

@ user3352668 simplemente agregue dos directorios. Por ejemplo, si por defecto contiene "archivos" y "morefiles", simplemente agregue "morefiles" a la cadena de nbt. Por cierto: la mejor solución es nbt, debería ser la respuesta aceptada
Anónimo

4
-C DIR es el mismo que --directory = DIR , cambia el directorio a DIR
Markus

1
Solo pensé en mencionar que el orden aquí es significativo. No puedes tener --directory="/home/username/drupal/sites/default files"enfrente del destino ~/backup.tgz.
Chris Stryczynski

6
@ChrisStryczynski Tenga en cuenta que la ruta proporcionada por la --directoryopción no lo es "/home/username/drupal/sites/default files". Es /home/username/drupal/sites/default, seguido de un argumento posicional que especifica el nombre del directorio a ser empaquetado con tar, files.
Capítulo

48

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

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

¡¡No olvide el punto (.) Al final !!


4
¿Qué hace el punto al final?
Bruce Sun

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

2
Si omite el punto al final, es probable que reciba la advertencia: tar: Cobardemente se niega a crear un archivo vacío
user12345

3
Todo el mundo habla de la opción -C o --directorio pero sin el pequeño '.' al final, como lo mencionó @MaikolD, no funciona, al menos en mi entorno.
aks

5
Esto todavía te deja con una .carpeta en la raíz del alquitrán
electrovir

2

Para comprimir todos los archivos txt (* .txt) desde /home/myuser/workspace/zip_from/ hacia /home/myuser/workspace/zip_to/sin la estructura de directorio de los archivos fuente, use el siguiente comando:

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

1

Crear un archivo tar

tar czf  $sourcedir/$backup_dir.tar --directory=$sourcedir WEB-INF en

Un-tar archivos en una máquina local

tar -xvf $deploydir/med365/$backup_dir.tar -C $deploydir/med365/

Subir a un servidor

scp -r -i $privatekey $sourcedir/$backup_dir.tar $server:$deploydir/med365/
echo "File uploaded.. deployment folders"

Un-tar en el servidor

ssh -i $privatekey $server tar -xvf $deploydir/med365/$backup_dir.tar -C $deploydir/med365/

0

Esto funcionó para mí:

gzip -dc "<your_file>.tgz" | tar x -C <location>

0

Para mí -C o --directory no funcionó, uso esto

cd source/directory/or/file
tar -cvzf destination/packaged-app.tgz *.jar
# this will put your current directory to what it previously was
cd -

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

-C hace el cd por ti


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

3
-Cfunciona, pero debe usarse como-C <dir> file1 file2 ...
vyom
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.