root@server # tar fcz bkup.tar.gz /home/foo/
tar: Removing leading `/' from member names
Wie kann ich dieses Problem lösen und die /
Dateinamen beibehalten?
-C /
beim Extrahieren an.
root@server # tar fcz bkup.tar.gz /home/foo/
tar: Removing leading `/' from member names
Wie kann ich dieses Problem lösen und die /
Dateinamen beibehalten?
-C /
beim Extrahieren an.
Antworten:
Verwenden Sie die Option --absolute-names
oder -P
, um diese Funktion zu deaktivieren.
tar fczP bkup.tar.gz /home/foo/
tar fcz bkup.tar.gz --absolute-names /home/foo
-C /
in @Marcus 'Antwort beschriebene Option verwenden, wird die STDERR-Nachricht entfernt, wenn dies Ihr primäres Ziel ist.
Das ist eigentlich eine Funktion, kein Problem. Archive mit absoluten Standorten sind ein Sicherheitsrisiko. Angreifer könnten solche Archive verwenden, um Benutzer dazu zu verleiten, Dateien an kritischen Systemstandorten zu installieren.
Ja, du könntest es gebrauchen -P
. Aber was ist falsch daran, dass tar den Schrägstrich entfernen darf und der Benutzer des Archivs lediglich die Extraktion explizit im Stammverzeichnis ausführen muss? Dann wirken sie sich bewusst auf kritische Systemstandorte aus und können dies nicht aus Versehen tun.
tar
. Diese bestimmte Nachricht wurde tar
mit dem Status beendet 1
, was dazu führte, dass ich bei erfolgreichen Sicherungen falsche E-Mail-Warnungen erhielt, einfach weil tar
diese Nachricht an STDERR geschrieben wurde. Ich habe dieses Problem behoben, indem ich meine eigene optimierte Version von @ Marcus 'Lösung verwendet habe:cd /path/to/network/share && tar -cJf scripts.backup.tar.xz -C / home/user/scripts 2>/dev/null || [send an email alert]
-P
- zum Beispiel, wenn Sie eine Art Dateisystem-Snapshot-Funktion in FUSE bereitstellen. In manchen Fällen möchten Sie möglicherweise einen Snapshot in einem bestimmten Verzeichnis entpacken und nicht cwd
aus Sicht des Benutzers.
Wenn Sie loswerden wollen „leading Entfernen` /‘von Mitgliedsnamen“ zu STDERR gedruckt werden, aber immer noch wollen , diese Schrägstriche wie Teer weise standardmäßig tut verlassen, sah ich eine hervorragende Lösung hier durch Kommentator timsoft.
Die Lösung besteht darin, mit der Option -C das Verzeichnis in das Stammverzeichnis (/) zu ändern und dann den zu archivierenden Dateibaum ohne einen führenden Schrägstrich anzugeben , da Sie jetzt nur einen relativen Pfad benötigen. Dies funktioniert genauso wie ein normaler Befehl zum Erstellen von Tar, es ist jedoch kein Strippen erforderlich:
tar fcz bkup.tar.gz -C / home/foo/
tar c -C / home/foo/*
), da die Shell nichts über das geänderte Root-Verzeichnis weiß. Aber immer noch eine gute Antwort für andere Fälle.
-C /
funktioniert bei mir nicht, Punkt. Das hindert mich nicht daran.
Einen Monat zu spät, aber ich fand die geeignetste Lösung für meinen Fall (in einem Shell-Skript) darin, in das übergeordnete Verzeichnis zu wechseln und den Befehl dort auszuführen.
cd /var/www/
tar -czf mysite.gz mysite
Anstatt von:
tar -czf /var/www/mysite.gz /var/www/mysite
Dies ist , wie ich es tat durch Brute - Force - Methode verwendet: 2>&1 | grep -v "Removing leading"
.
Zum Beispiel:
tar -cf "$BKUPDIR/${BKUPFILE}.tar" --overwrite --exclude '.*' --one-file-system "$SRCDIR" 2>&1 | grep -v "Removing leading"
tar
Befehl wird möglicherweise 2
bei einem schwerwiegenden Fehler zurückgegeben.
Ich habe dieses Problem gelöst mit:
cd /home/foo && tar czf ~/backup.tar.gz .
Auf diese Weise versuchen Sie nicht, in erster Linie absolute Pfade in das tar-Archiv einzufügen. Wenn Sie es im Stammverzeichnis des Dateisystems entpacken möchten, müssen Sie nur
cd / && tar xzf backupt.tar.gz
nach der Übertragung.