archivos tar de otro directorio sin copiarlos

10

Esto debería ser muy simple para los expertos aquí.

Tengo una cuenta de Linux con una cuota de disco de usuario de solo 6 GB. Hay una carpeta de datos /optcon aproximadamente 3 GB de datos cuando, cuando se comprime, llega a 1 GB. Hay algunos enlaces simbólicos dentro data-folder. Por lo general, para hacer una copia de seguridad del trabajo, solía hacer lo siguiente.

cp -rvfL /opt/data-folder ~/
cd ~/
tar -zcvf data-folder.tar.gz data-folder
rm -rvf data-folder

Ahora ya he consumido 2.5GB en mi cuota de disco de usuario, tengo suficiente espacio para copiar archivos a mi casa, pero no a tarella nuevamente.

¿Hay alguna forma de tar y copiar la carpeta con un solo comando, por ejemplo, usando una tubería?

PD: No puedo /optingresar porque solo tengo acceso de lectura /opt.

Kamath
fuente
Ciertamente puedes ingresar / optar, no puedes escribir allí, eso es todo. La bandera 'f' para tar (3) dice que deposite el resultado en ese archivo, que muy bien puede estar en otro lugar. Es decir, cd /opt; tar zcf $HOME/junk.tar.gz junk.
vonbrand

Respuestas:

5

¿Desea crear un archivo tar lejos del lugar donde residen los archivos que necesita para tar?

Hay muchas maneras de hacer esto.

Si se va a crear localmente (= en la misma máquina):

tar czvf /path/to/destination/newfile.tar.gz  ./SOURCEDIR_OR_FILES

Puede agregar archivos o directorios adicionales a tar al final de ese comando.

Si se va a crear de forma remota (es decir, si desea crear el archivo tar en un host remoto desde el que contiene los datos que se van a tarar):

tar czvf - ./SOURCEDIR_OR_FILES | ssh user@host 'cat > newfile.tar.gz'

La versión posterior es muy versátil. Por ejemplo, también puede "duplicar" un directorio + subdirectorios utilizando la misma técnica:

Duplicar un directorio + subdirigir a otro directorio local:

tar cf - ./SOURCEDIR_OR_FILES | ( cd LOCAL_DEST_DIR && tar xvf - )

Duplicar un directorio + subdividir a otro directorio remoto:

tar cvf - ./SOURCEDIR_OR_FILES | ssh user@host 'cd REMOTE_DEST_DIR && tar xf - '

Suelte la 'v' si no la necesita para mostrar los archivos, ya que están tar-ed (o sin restricciones): luego irá mucho más rápido, pero no dirá mucho a menos que haya un error.

Uso ". / ..." para que la fuente fuerce el alquitrán a almacenarlo como una ruta RELATIVA. En algunos casos, querrá agregar información de ruta adicional:

Por ejemplo, para tar los archivos crontab, incluido el de / etc, puede hacer:

cd / ; tar czf all_crons.tgz  ./etc/*cron*  ./var/spool/cron

Utilizo a propósito la ruta relativa: algunas versiones antiguas de tar pueden ser peligrosas y extraer archivos con su ruta GLOBAL original, lo que significa que podría hacer: cd /safedir ; tar xvf sometary hacer que los archivos con nombres globales sobrescriban los archivos en su ruta original, que está FUERA de / safedir y no debajo! Muy peligroso, y aún posible, ya que existen servidores de producción antiguos. Es mejor usarlo para usar rutas relativas todo el tiempo, incluso si usa un alquitrán más reciente.

Olivier Dulac
fuente
otro no se trata de diferencias entre alquitranes: en algunos puede que necesite usar en -cvflugar de cvf, otros no reconocerán el -estilo. Y zsolía significar "comprimir con 'comprimir'", pero en alquitrán "reciente" significa "comprimir con gzip". Se puede saber qué se utiliza la compresión en un archivo con: file zefile. Y luego compresscámbiele el nombre como corresponda (si usa alquitrán , debería cambiarse el nombre .tar.Z no .tar.gz)
Olivier Dulac
0

Utiliza la -hopción tar. Desde la página del manual:

-h, --dereference
don't archive symlinks; archive the files they point to

para que puedas usar tar -zcvfh data-folder.tar.gz /opt/data-folder

harish.venkat
fuente
Ohh debería haberlo mencionado, ya probé tar -zcvfh ~ / data-folder.tar.gz / opt / data-folder. Me estoy metiendo en algún tipo de problema de archivo circular. Sigo copiando algunos archivos y nunca termina.
Kamath
Parece que hay un enlace simbólico circular en una subcarpeta de datos.
Kamath
2
@AUZKamath, eso es un error en el tar de GNU. Es posible que desee probar en su bsdtarlugar, o pax( cd /opt && pax -Lw data-folder | gzip > ~/data-folder.tar.gz) que detectaría los bucles
Stéphane Chazelas
1
@AUZKamath Puede usar tar y eliminar simultáneamente los archivos de su directorio de inicio tar -rf <tarfilename> <filename>para agregarlos al archivo tar existente.
harish.venkat
1
@Stephane Chazelas, funciona, deberías ponerlo como respuesta.
Kamath