Ho il seguente comando nella parte di uno script della shell di backup:
tar -cjf site1.bz2 /var/www/site1/
Quando elenco i contenuti dell'archivio, ottengo:
tar -tf site1.bz2
var/www/site1/style.css
var/www/site1/index.html
var/www/site1/page2.html
var/www/site1/page3.html
var/www/site1/images/img1.png
var/www/site1/images/img2.png
var/www/site1/subdir/index.html
Ma vorrei rimuovere la parte /var/www/site1
dalla directory e dai nomi dei file all'interno dell'archivio, al fine di semplificare l'estrazione ed evitare la struttura di directory costante inutile. Non lo so mai, nel caso in cui estrarrei siti Web di backup in un luogo in cui i dati Web non erano archiviati /var/www
.
Per l'esempio sopra, vorrei avere:
tar -tf site1.bz2
style.css
index.html
page2.html
page3.html
images/img1.png
images/img2.png
subdir/index.html
Quindi, quando estraggo, i file vengono estratti nella directory corrente e non ho bisogno di spostare i file estratti in seguito, e così vengono preservate le strutture della sottodirectory.
Esistono già molte domande su tar e il backup in stackoverflow
e in altri punti del Web, ma la maggior parte di essi richiede di eliminare l'intera struttura della sottodirectory (appiattimento) o semplicemente aggiungere o rimuovere l'iniziale / nei nomi (non non so cosa cambia esattamente durante l'estrazione), ma non di più.
Dopo aver letto alcune delle soluzioni trovate qua e là e il manuale, ho provato:
tar -cjf site1.bz2 -C . /var/www/site1/
tar -cjf site1.bz2 -C / /var/www/site1/
tar -cjf site1.bz2 -C /var/www/site1/ /var/www/site1/
tar -cjf site1.bz2 --strip-components=3 /var/www/site1/
Ma nessuno di loro ha funzionato come voglio. Alcuni non fanno nulla, altri non archiviano più le sottodirectory.
È all'interno di uno script della shell di backup avviato da Cron, quindi non so bene quale utente lo esegue, qual è il percorso e la directory corrente, quindi è sempre necessario scrivere il percorso assoluto per tutto e preferirei non cambiare la directory corrente per evitare di rompere qualcosa di più nello script (perché non solo esegue il backup di siti Web, ma anche di database, quindi invia tutto ciò a FTP ecc.)
Come raggiungere questo obiettivo?
Ho appena frainteso come funziona l'opzione -C?
-C
significa solo "cambia directory", mentre la sostituzione di un percorso (o prefisso) può essere eseguita solo da --transform
. rif. superuser.com/questions/595510/prepend-prefix-in-tar/595512 puoi semplicemente -C (cambiare directory) e - trasformarlo: `` tar cjf site1.bz2 --transform "s / ^ \. \ // $ targetbase / "-C / var / www / site1. ``