file tar da un'altra directory senza copiarli


10

Questo dovrebbe essere molto semplice per gli esperti qui.

Ho un account Linux con una quota del disco utente di soli 6 GB. C'è una cartella di dati dentro /optcon circa 3 GB di dati con quando compresso arriva 1 GB. Ci sono alcuni collegamenti simbolici all'interno data-folder. Di solito per fare un backup del lavoro ero solito fare quanto segue.

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

Ora ho già consumato 2,5 GB nella quota del mio disco utente, ho abbastanza spazio per copiare i file a casa mia, ma non di tarnuovo.

Esiste un modo per tarare e copiare la cartella con un solo comando, ad esempio usando una pipe.

PS Non riesco /optad accedere perché ho solo accesso in lettura a /opt.


Sicuramente puoi accedere / optare, non puoi scrivere lì, tutto qui. Il flag 'f' su tar (3) dice di depositare il risultato in quel file, che può benissimo essere altrove. Vale a dire, cd /opt; tar zcf $HOME/junk.tar.gz junk.
vonbrand,

Risposte:


5

Vuoi creare un file tar lontano dal luogo in cui devono risiedere i file?

Ci sono molti modi per farlo.

Se deve essere creato localmente (= sulla stessa macchina):

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

È possibile aggiungere ulteriori file o directory da tar alla fine di quel comando.

Se deve essere creato in remoto (ad esempio, si desidera creare il file tar su un host remoto da quello contenente i dati da tarare):

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

La versione successiva è molto versatile. Ad esempio puoi anche "duplicare" una directory + sottodirati usando la stessa tecnica:

Duplica una directory + sottocartelle in un'altra directory locale:

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

Duplica una directory + subdir in un'altra directory remota:

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

Rilascia la 'v' se non ti serve per visualizzare i file perché sono tarati (o non tarati): andrà molto più veloce, ma non dirà molto a meno che non ci sia un errore.

Uso ". / ..." per la sorgente per forzare tar per memorizzarlo come percorso RELATIVO. In alcuni casi ti consigliamo di aggiungere ulteriori informazioni sul percorso:

Ad esempio per tarare i file crontab, incluso quello in / etc, puoi fare:

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

Uso apposta il percorso relativo: alcune VECCHIE versioni di tar possono essere pericolose ed estrarre i file con il loro percorso GLOBALE originale, il che significa che potresti farlo: cd /safedir ; tar xvf sometare avere i file con nomi globali sovrascrivere i file nel loro percorso originale, che è ESTERNO di / safedir e non sotto! Molto pericoloso e ancora possibile in quanto vi sono vecchi server di produzione là fuori. Meglio essere usato per usare sempre percorsi relativi, anche se usi un tar più recente.


un altro non riguarda le differenze tra tar: su alcuni potrebbe essere necessario utilizzare -cvfinvece di cvf, altri non riconosceranno lo -stile. E zusato per "comprimere con" comprimere "", ma su tar "recenti" significa "comprimere con gzip". Si può sapere che la compressione viene utilizzato su un file con: file zefile. E quindi rinominalo di conseguenza (se usi il tuo catrame compress, dovrebbe essere rinominato .tar.Z non .tar.gz)
Olivier Dulac il

0

Usa l' -hopzione tar. Dalla pagina man:

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

così puoi usare tar -zcvfh data-folder.tar.gz /opt/data-folder


Ohh avrei dovuto menzionarlo, ho già provato tar -zcvfh ~ / data-folder.tar.gz / opt / data-folder. Sto entrando in una sorta di problema di archivio circolare. Continuo a copiare alcuni file e non finisce mai.
Kamath,

Sembra che ci sia un collegamento simbolico circolare in una sottocartella di dati.
Kamath,

2
@AUZKamath, questo è un bug nel tar GNU. Potresti voler provare bsdtarinvece, o pax( cd /opt && pax -Lw data-folder | gzip > ~/data-folder.tar.gz) che rileverà i loop
Stéphane Chazelas il

1
@AUZKamath È possibile tarare e rimuovere contemporaneamente i file dalla directory home da utilizzare tar -rf <tarfilename> <filename>per aggiungerli al file tar esistente.
harish.venkat,

1
@Stephane Chazelas, funziona, dovresti metterlo come risposta.
Kamath,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.