Tar mit Regex
Simone
- perl
Hi,
habe ein kleines Problem wo ich nicht weiterkomme und Eure Hilfe benötige.
ich haben ein Tar-Archiv welche folgende Struktur aufweist:
mnt/web31333/d0/102/54094410/htdocs/jugendclub.de/./wp-mail.php
mnt/web31333/d0/102/54094410/htdocs/jugendclub.de/./wp-settings.php
mnt/web31333/d0/102/54094410/htdocs/jugendclub.de/./wp-signup.php
mnt/web31333/d0/102/54094410/htdocs/jugendclub.de/./wp-trackback.php
Ich möchte dieses Tar-Archiv ohne strip-components in das Verzeichnis "/var/www/html/jugendclub.de/dist/" entpacken.
Hier der Befehl mit --strip-components 7
tar xvf /var/www/html/jugendclub.de/dist/sicher/1587120773_web-jugendclub.de.tar.gz --strip-components 7 -C /var/www/html/jugendclub.de/dist/
Mir fehlt der Regex welcher den vorderen Teil abschneidet
mnt/web31333/d0/102/54094410/htdocs/jugendclub.de/./wp-trackback.php
Beim Auspacken soll natürlich das neue Verzeichnis übernommen werden
Also hier entpacken:
/var/www/html/jugendclub.de/dist/wp-trackback.php
tar xvf /var/www/html/jugendclub.de/dist/sicher/1587120773_web-jugendclub.de.tar.gz REGEX /var/www/html/jugendclub.de/dist/
Beste Grüße
Simone
Aus man tar
:
--transform=EXPRESSION, --xform=EXPRESSION
Use sed replace EXPRESSION to transform file names.
ich habe eine datei laptops.tar mit:
~> tar -t -f laptops.tar
Downloads/Laptops/T500/
Downloads/Laptops/T500/css821mst.pdf
Downloads/Laptops/T530/
Downloads/Laptops/T530/ac_dg_201403_de.pdf
(gekürzt)
tar -x --transform='flags=r;s|Downloads/Laptops/||' -f laptops.tar
[Y] gestestet, funktioniert
Erläuterung:
Die Pipe-Symbole |
habe ich als Regex-Trenner zwischen /was/wodurch/wie
genommen, weil die in Dateinamen eher selten sind und das die Notation einfacher macht. Bitte denke daran, dass Du eine ganze Reihe von Symbolen maskieren musst.
Hier noch die Anleitung des „Herstellers“.
Hey, Klasse!
Ich habe versucht mich etwas rein zudenken.
--transform='flags=r;s|Downloads/Laptops/||'
Macht das Gleiche wie
echo "Downloads/Laptops/T530/ac_dg_201403_de.pdf" | sed -r 's|Downloads/Laptops/||'
korrekt ?
also brauche ich Splitt Muster für /./
mnt/web31333/d0/102/54094410/htdocs/jugendclub.de[/./]wp-mail.php
Grüße Simone
Du willst alles vor dem /./
und dieses /./
selbst mit abschneiden? Dann ist das doch einfach:
tar -t --transform='flags=s|^/\./||' --show-transformed -v -z -f dein.tar.gz
Das flag „r“ kannst Du wohl weglassen, wenn Dir die Ausgaben gefallen kannst Du durch den Ersatz von -t durch -x „scharf stellen“.
Nicht wundern, wenn die alten Ordner trotzdem erzeugt werden - das passiert bei mir auch, die bleiben aber leer. Je nachdem, ob der so im aktuellen Ordner entstehende Unterordner mnt/ weg kann, hilft ein nachfolgendes rm -r mnt
.
tar -t --transform='flags=s|^.*/\./||' --show-transformed -v -z -f dein.tar.gz
natürlich… Es soll ja eine beliebige Anzahl beliebiger Zeichen (.*
) am Beginn des Strings (^
) und das /./
(/\./
) „gekillt“ werden.
tar -t --transform='flags=s|^.*/\./||' --show-transformed -v -z -f dein.tar.gz
natürlich… Es soll ja eine beliebige Anzahl beliebiger Zeichen (
.*
) am Beginn des Strings (^
) und das/./
(/\./
) „gekillt“ werden.
“Some people, when confronted with a problem, think ‘I know, I’ll use regular expressions.’ Now they have two problems.”
„…Now they have two problems.”
Reicht hier nicht ganz. Ich hätte das wohl „stumpf“ mit
olddir=$(pwd);
tmpdir=$(mktemp -d);
cd "$tmpdir";
tar -xz -- "/woher/auch/immer/file.tar.gz"
find -type f -exec mv "{}" "/wohin/es/soll/" \;;
cd "$olddir";
rm -rf "$tmpdir";
gescriptet. Sind aber auch 7 „Probleme“.
Hi,
das muss ich gleich mal durchlaufen lassen
wp-mail.php
Klasse Leute Hier ... vielen Dank!
Simone
Na dann. Freut mich geholfen zu haben.
Vielen, vielen Dank!
und hier für die Nachwelt:
TAR mit REGEX
Sichern des Webverzeichnis:
root@OFF-SERVER:# tar -zcvpf /var/www/html/jugendclub.de/dist/sicher/1587131934_web-jugendclub.de.tar.gz --exclude='./sicher' /var/www/html/jugendclub.de/dist/.
Wiederherstellen:
root@OFF-SERVER:# tar --transform='s|^.*/./||' --show-transformed -v -x -f /var/www/html/jugendclub.de/dist/sicher/deinetar.tar.gz -C /var/www/html/jugendclub.de/dist/
Grüße Simone
Rechte müssen angepasst werden (ToDo)
Aus dem Grund bin gerne geneigt, bei Backups mit
getfacl -R . > acl.list
eine Liste mit den Eigentümern, Gruppen und Rechten zu erzeugen, die man mit
setfacl --restore acl.list
nutzen kann. Die acl.list ist menschen- und machinenlesbar, kann mit den üblichen Linux-Werkzeugen wie sed, tr, awk ... bearbeitet werden.
Falls (noch) nicht installiert: Das Paket heißt „acl“.
getfacl -R . > acl.list
Da es in dem Fall oft unklug ist, symbolischen Links zu folgen:
getfacl -R -P . > acl.list
Es gibt da was, was mir keine Ruhe gelassen hat:
tar xvf /var/www/html/jugendclub.de/dist/sicher/1587120773_web-jugendclub.de.tar.gz
Hm. Die Zahl sieht für Hackixe wie meinereinen selbst nach einer Unixtime aus. Sowas seh ich also so nach:
date --date='@1587120773';
Fr 17. Apr 12:52:53 CEST 2020
Jepp. Sieht ziemlich echt aus, sind wahrscheinlich keine Beipieldaten.
Da diese Datei „1587120773_web-jugendclub.de.tar.gz“ sehr wahrscheinlich auch Passwörter (z.B. für den Datenbankzugang) enthält solltest Du dafür Sorge tragen, dass diese NICHT von Dritten, z.B. via
http://jugendclub.de/dist/sicher/1587120773_web-jugendclub.de.tar.gz
abrufbar ist (bzw. wird, denn gegenwärtig bekommt man da 404er, aber Du hast scheinbar vor, jugendclub.de von Strato auf einen anderen, wahrscheinlich selbst verwalteten virtuellen Server umzuziehen - oder?).
Zudem solltest Du künftig darauf achten, keine echten Pfadangaben in Foren und dergleichen zu veröffentlichen.
Hm,
jugendclub.de ist ein schöner Domain-Name!
aber ich habe keinen Zugriff darauf ;o) also nur ein Beispiel...
Grüße Simone
Moin,
jugendclub.de ist ein schöner Domain-Name!
ja, und er ist tatsächlich vergeben, "gehört" also jemandem.
aber ich habe keinen Zugriff darauf ;o) also nur ein Beispiel...
Fremde Domainnamen für Beispiele zu verwenden, ist aber nicht gerade die feine Art. Unter Umständen sind die Inhaber darüber gar nicht begeistert.
Für neutrale Beispiele gibt es extra dafür vorgesehene Platzhalter-Domains wie example.net oder example.org (aber nicht example.de).
Live long and pros healthy,
Martin
Hi,
Fremde Domainnamen für Beispiele zu verwenden, ist aber nicht gerade die feine Art. Unter Umständen sind die Inhaber darüber gar nicht begeistert.
Ja, dem kann ich nur zustimmen! Zum Glück ist es nur eine "Verzeichnisbezeichnung" innerhalb einer Linux-Funktion ;o)
Nein, habe versucht meinen Betrag zu überarbeiten ... offenbar fehlen mir die Berechtigungen.
Beste Grüße Simone
Dann scheint ja alles gut.
Um die falsch-positive Alarmierung durch überempfindliche Burschen wie mich zu vermeiden hat es sich eingebürgert, statt echten und gar fremden Host bzw. Domainnamen „example.com“ das berühmte Elternbar Max und Maria Mustermann sowie der Kinderschar [foo, bar, baz, tok, ...] zu bemühen.