Ich habe folgenden Befehl im Teil eines Backup-Shell-Skripts:
tar -cjf site1.bz2 /var/www/site1/
Wenn ich den Inhalt des Archivs aufliste, erhalte ich:
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
Aber ich möchte den Teil /var/www/site1
aus Verzeichnis- und Dateinamen im Archiv entfernen, um die Extraktion zu vereinfachen und überflüssige, konstante Verzeichnisstrukturen zu vermeiden. Man weiß ja nie, falls ich die gesicherten Websites an einem Ort extrahieren würde, wo Webdaten nicht unter /var/www
gespeichert sind.
Für das obige Beispiel würde ich gerne haben:
tar -tf site1.bz2
style.css
index.html
page2.html
page3.html
images/img1.png
images/img2.png
subdir/index.html
So dass beim Extrahieren die Dateien im aktuellen Verzeichnis extrahiert werden und ich die extrahierten Dateien nicht verschieben muss und damit die Unterverzeichnisstruktur erhalten bleibt.
Es gibt bereits viele Fragen zu tar und Backups in stackoverflow
und an anderen Stellen im Web, aber die meisten fragen danach, die gesamte Unterverzeichnisstruktur zu entfernen (flach zu machen), oder nur das anfängliche / in den Namen hinzuzufügen oder zu entfernen (ich weiß nicht genau, was sich ändert, wenn man sie extrahiert), aber nicht mehr.
Nachdem ich einige der Lösungen, die hier und da gefunden wurden, sowie das Handbuch gelesen habe, habe ich Folgendes versucht:
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/
Aber keiner von ihnen hat so funktioniert, wie ich es möchte. Einige machen gar nichts, andere archivieren keine Unterverzeichnisse mehr.
Es handelt sich um ein Backup-Shell-Skript, das von einem Cron gestartet wird, also weiß ich nicht genau, welcher Benutzer es ausführt, was der Pfad und das aktuelle Verzeichnis ist, daher ist es immer erforderlich, den absoluten Pfad für alles zu schreiben, und ich würde es vorziehen, das aktuelle Verzeichnis nicht zu ändern, um zu vermeiden, dass im Skript noch etwas weiter bricht (weil es nicht nur Websites sichert, sondern auch Datenbanken, die dann alles an FTP senden etc.).
Wie kann das erreicht werden?
Habe ich das Funktionsprinzip der Option -C einfach missverstanden?