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.ware quello che vogliamo è soloproject/application.warquindi:tar -cvf output_filename.tar -C /home/testuser/workspace projectNota:c'è uno spazio tra
workspaceeproject; 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/tarestrarrà il tarball in base al percorso specificato e preservando il percorso di creazione; nel nostro esempio il fileapplication.warverrà 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.