tar -cjf site1.tar.bz2 -C /var/www/site1 .
Nell'esempio precedente, tar cambierà nella directory /var/www/site1
prima di fare il suo dovere perché l'opzione -C /var/www/site1
è stato dato.
Da man tar
:
OTHER OPTIONS
-C, --directory DIR
change to directory DIR
L'opzione -C
lavori; solo per chiarezza posterò 2 esempi:
-
creazione di un tarball senza il percorso completo:percorso completo
/home/testuser/workspace/project/application.war
e quello che vogliamo è soloproject/application.war
quindi:tar -cvf output_filename.tar -C /home/testuser/workspace project
Nota:c'è uno spazio tra
workspace
eproject
; tar sostituirà il percorso completo con soloproject
. -
estrazione del tarball con la modifica del percorso di destinazione (predefinito
.
, ovvero la directory corrente)tar -xvf output_filename.tar -C /home/deploy/
tar
estrarrà il tarball in base al percorso specificato e preservando il percorso di creazione; nel nostro esempio il fileapplication.war
verrà estratto in/home/deploy/project/application.war
./home/deploy
:dato su estratto
project
:dato alla creazione del tarball
Nota:se si desidera posizionare il tarball creato in una directory di destinazione, è sufficiente aggiungere il percorso di destinazione prima del nome del tarball. ad esempio:
tar -cvf /path/to/place/output_filename.tar -C /home/testuser/workspace project
Sembra -C
l'opzione fino a tar v2.8.3 non funziona in modo coerente su tutte le piattaforme (SO). -C
si dice che l'opzione aggiunga la directory all'archivio, ma su Mac e Ubuntu aggiunge il prefisso del percorso assoluto all'interno del file tar.gz generato.
tar target_path/file.tar.gz -C source_path/source_dir
Pertanto la soluzione coerente e robusta è cd
in source_path (directory padre di source_dir) ed eseguire
tar target_path/file.tar.gz source_dir
o
tar -cf target_path/file.tar.gz source_dir
nella tua sceneggiatura. Questo rimuoverà il prefisso del percorso assoluto nella struttura della directory del file tar.gz generato.