root@server # tar fcz bkup.tar.gz /home/foo/
tar: Removing leading `/' from member names
Come posso risolvere questo problema e conservare i /
nomi dei file?
-C /
durante l'estrazione.
root@server # tar fcz bkup.tar.gz /home/foo/
tar: Removing leading `/' from member names
Come posso risolvere questo problema e conservare i /
nomi dei file?
-C /
durante l'estrazione.
Risposte:
Utilizzare l' opzione --absolute-names
o -P
per disabilitare questa funzione.
tar fczP bkup.tar.gz /home/foo/
tar fcz bkup.tar.gz --absolute-names /home/foo
-C /
dell'opzione come descritto nella risposta di @Marcus eliminerà il messaggio STDERR se questo è il tuo obiettivo principale.
Questa è in realtà una caratteristica, non un problema. Gli archivi con posizioni assolute rappresentano un rischio per la sicurezza. Gli aggressori potrebbero utilizzare tali archivi per indurre gli utenti a installare file in posizioni critiche del sistema.
Sì, potresti usare -P
. Ma cosa c'è di sbagliato nel consentire a tar di rimuovere la barra, e semplicemente richiedere all'utente dell'archivio di eseguire esplicitamente l'estrazione nella directory principale? Quindi hanno un impatto consapevole sulle posizioni critiche del sistema e non possono farlo per caso.
tar
. Questo particolare messaggio stava causando la tar
chiusura con uno stato di 1
, che mi stava causando la ricezione di falsi avvisi e-mail su backup riusciti, semplicemente perché tar
scrivevo questo messaggio su STDERR. Ho risolto questo problema usando la mia versione ottimizzata della soluzione di cd /path/to/network/share && tar -cJf scripts.backup.tar.xz -C / home/user/scripts 2>/dev/null || [send an email alert]
-P
, ad esempio se stai fornendo una sorta di funzione di snapshot del filesystem in FUSE. Qualche volta potresti voler decomprimere un'istantanea in una directory specifica piuttosto che cwd
dal punto di vista dell'utente.
Se vuoi sbarazzarti del fatto che "Rimozione di` / 'dai nomi dei membri "venga stampato su STDERR, ma vuoi comunque lasciare quelle barre come tar saggiamente di default, ho visto qui una soluzione eccellente dal commentatore timsoft.
La soluzione prevede l'uso dell'opzione -C per cambiare la directory nella radice (/), quindi specificare l'albero dei file da archiviare senza una barra iniziale, perché ora è necessario solo un percorso relativo. Questo fa la stessa cosa di un normale comando tar create, ma non è necessario lo stripping:
tar fcz bkup.tar.gz -C / home/foo/
tar c -C / home/foo/*
), poiché la shell non è a conoscenza della radice modificata. Ma comunque una buona risposta per altri casi.
-C /
non funziona per me, punto. Non impedisce lo standard per me.
Un mese di ritardo, ma ho trovato la soluzione più appropriata per il mio caso (in uno script di shell) è andare alla directory principale ed eseguire il comando lì.
cd /var/www/
tar -czf mysite.gz mysite
Invece di:
tar -czf /var/www/mysite.gz /var/www/mysite
Ecco come ho fatto utilizzando il metodo di forza bruta: 2>&1 | grep -v "Removing leading"
.
Per esempio:
tar -cf "$BKUPDIR/${BKUPFILE}.tar" --overwrite --exclude '.*' --one-file-system "$SRCDIR" 2>&1 | grep -v "Removing leading"
tar
comando potrebbe restituire 2
un errore irreversibile.
Ho risolto questo problema con:
cd /home/foo && tar czf ~/backup.tar.gz .
in questo modo non stai cercando di inserire percorsi assoluti nell'archivio tar in primo luogo. Se si desidera decomprimerlo alla radice del file system, basta
cd / && tar xzf backupt.tar.gz
dopo averlo trasferito.