fichiers tar d'un autre répertoire sans les copier


10

Cela devrait être très simple pour les experts ici.

J'ai un compte Linux avec un quota de disque utilisateur de seulement 6 Go. Il y a un dossier /optde données avec environ 3 Go de données avec une compression de 1 Go. Il y a des liens symboliques à l'intérieur data-folder. Habituellement, pour effectuer une sauvegarde de travail, je faisais ce qui suit.

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

Maintenant, j'ai déjà consommé 2,5 Go dans mon quota de disque utilisateur, j'ai juste assez d'espace pour copier des fichiers dans ma maison, mais pas à tarnouveau.

Existe-t-il un moyen de tar et de copier le dossier avec en une seule commande, par exemple en utilisant un canal.

PS Je ne peux pas tarir /optcar je n'ai qu'un accès en lecture à /opt.


Vous pouvez certainement tarer dans / opt, vous ne pouvez pas y écrire , c'est tout. Le drapeau 'f' de tar (3) indique de déposer le résultat dans ce fichier, qui peut très bien être ailleurs. -À- dire, cd /opt; tar zcf $HOME/junk.tar.gz junk.
vonbrand

Réponses:


5

Vous voulez créer un fichier tar loin de l'endroit où les fichiers dont vous avez besoin pour tar résident?

Il existe plusieurs façons de procéder.

S'il doit être créé localement (= sur la même machine):

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

Vous pouvez ajouter des fichiers ou des répertoires supplémentaires à tar à la fin de cette commande.

S'il doit être créé à distance (c'est-à-dire que vous souhaitez créer le fichier tar sur un hôte distant à partir de celui contenant les données à tarer):

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

La dernière version est très polyvalente. Par exemple, vous pouvez également "dupliquer" un répertoire + sous-répertoires en utilisant la même technique:

Dupliquez un répertoire + sous-répertoires vers un autre répertoire local:

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

Dupliquez un répertoire + sous-répertoires vers un autre répertoire distant:

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

Déposez le 'v' si vous n'en avez pas besoin pour afficher les fichiers car ils sont tarés (ou non tarés): il ira alors beaucoup plus vite, mais ne dira pas grand-chose sauf en cas d'erreur.

J'utilise ". / ..." pour la source pour forcer tar à le stocker en tant que chemin RELATIF. Dans certains cas, vous souhaiterez ajouter des informations de chemin supplémentaires:

Par exemple, pour tarer les fichiers crontab, y compris celui dans / etc, vous pouvez faire:

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

J'utilise exprès le chemin relatif: certaines anciennes versions de tar peuvent être dangereuses et extraire des fichiers avec leur chemin GLOBAL d'origine, ce qui signifie que vous pourriez faire: cd /safedir ; tar xvf sometaret avoir les fichiers avec des noms globaux écraser les fichiers à leur chemin d'origine, qui est à l'extérieur de / safedir et pas en dessous! Très dangereux et toujours possible car il existe de vieux serveurs de production. Mieux vaut être utilisé pour utiliser des chemins relatifs tout le temps, même si vous utilisez un tar plus récent.


un autre ne concerne pas les différences entre les goudrons: sur certains, vous devrez peut-être utiliser à la -cvfplace de cvf, d'autres ne reconnaîtront pas le -style. Et zutilisé pour signifier «compresser avec« compresser »», mais sur tar «récent», cela signifie «compresser avec gzip». Vous pouvez savoir quelle compression est utilisé sur un fichier avec: file zefile. Et puis renommez-le en conséquence (si votre tar utilise compress, il vaut mieux le renommer .tar.Z et non .tar.gz)
Olivier Dulac

0

Utilisez l' -hoption tar. Depuis la page de manuel:

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

afin que vous puissiez utiliser tar -zcvfh data-folder.tar.gz /opt/data-folder


Ohh j'aurais dû le mentionner, j'ai déjà essayé tar -zcvfh ~ / data-folder.tar.gz / opt / data-folder. J'entre dans une sorte de problème d'archive circulaire. Je continue de copier certains fichiers et ne finit jamais.
Kamath

Il semble qu'il y ait un lien symbolique circulaire dans un sous-dossier de données.
Kamath

2
@AUZKamath, c'est un bug dans GNU tar. Vous voudrez peut-être essayer à la bsdtarplace, ou pax( cd /opt && pax -Lw data-folder | gzip > ~/data-folder.tar.gz) qui détecterait les boucles
Stéphane Chazelas

1
@AUZKamath Vous pouvez simultanément tarer et supprimer les fichiers de votre répertoire personnel tar -rf <tarfilename> <filename>pour les ajouter au fichier tar existant.
harish.venkat

1
@Stephane Chazelas, ça marche, vous devriez le mettre comme réponse.
Kamath
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.