GNU/Linux >> Linux Esercitazione >  >> Linux

Tar una directory, ma non memorizzare percorsi assoluti completi nell'archivio

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:

  1. creazione di un tarball senza il percorso completo:percorso completo /home/testuser/workspace/project/application.war e quello che vogliamo è solo project/application.war quindi:

    tar -cvf output_filename.tar  -C /home/testuser/workspace project
    

    Nota:c'è uno spazio tra workspace e project; tar sostituirà il percorso completo con solo project .

  2. 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 file application.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.


Linux
  1. Come posso tarare una directory senza mantenere la struttura della directory?

  2. Come ottengo la directory assoluta di un file in bash?

  3. Esegui un ls senza ottenere il percorso completo

  4. Qual è la directory consigliata per archiviare il contenuto del sito web?

  5. Come rimuovo il percorso completo quando eseguo una compressione tar.gz?

Creare un archivio Tar di una directory, ad eccezione dei file nascosti?

Percorso assoluto vs relativo in Linux:qual è la differenza?

The Ultimate Tar Command Tutorial con 10 esempi pratici

Come posso copiare un albero di directory ma non i file in Linux?

Modo corretto di usare l'opzione --remove-files con TAR

Come escludere i file dall'archivio TAR usando le espressioni regolari?