A journey in the pursuit of excellence

Mein Leben in der IT. Jeder Arbeitstag eine Berg- und Talfahrt. Heute mal wieder ein Ausblick von der Bergspitze über die Täler:

“The key to pursuing excellence is to embrace an organic, long-term learning process. Usually, growth comes at the expense of previous comfort or safety.”
― Josh Waitzkin, The Art of Learning: A Journey in the Pursuit of Excellence

Gefunden habe ich das Zitat bei Frau Naysan Saran. Gesucht hatte ich ein Fundstück auf Ihrer Website – wieder einmal: wie man präzise und mit wenig Aufwand unter Linux multiple Dateien durchsucht und dort Ersetzungen vornimmt (eine der vielzähligen Möglichkeiten):

$ grep -rl "old_string" . | xargs sed -i 's/old_string/new_string/g'

Danke dafür!

Hinweise:

  • grep benötigt zur Maskierung („Escapen“) mit dem Backslash „\“ im Suchstring die Option „-E“
  • der Backslash „\“ zum Maskieren („Escapen“) ist u.a. auch bei runden Klammern im String-Parameter von sed notwendig
  • mit dem Parameter –no-messages wird zusätzlich die Ausgabe von Fehlern im o.g. grep-Befehl unterdrückt

Sind sehr viele Dateien betroffen, lohnt es sich vom zeitlichen Aufwand erheblich, ein find davor zu schalten, z.B.:

$ find . -type f -name "*.php" | xargs grep -El --no-messages "header \(\"HTTP" | xargs sed -Ei 's/header \(\"HTTP/header\(\"HTTP/g'

Zum Thema tar-Archiv und bestmöglicher Kompression mit lzma2:

$ XZ_OPT=-9 tar -xvJf xz_file_name.tar.xz

oder einfach nur komprimieren:

$ xz -zv file_name

und dekomprimieren:

$ xz -d file_name.tar.xz

Hinweis: komprimierte Archive lassen sich mit

$ tar --diff --file=archive.tar.xz -C folder_name

nicht mit den Dateien bzw. Ordnern im Dateisystem vergleichen, das komprimierte Archiv kann dementsprechend auch nicht upgedatet werden. Bei einem 40GB-Archiv, in dem 59GB in 40090 Dateien

find /verzeichnis -type f | wc -l

unterteilt in  3339 Ordnern

find /verzeichnis -type d | wc -l

stecken, dauert das Dekomprimieren zum Abgleich auf einem ollen Server schon mal einige Zeit. Um diese zu messen, setzt man einfach ein time vor das Programm.

Der Vergleich selbst geht dann mit:

$ tar -dvf archive.tar
(aus dem Ordner heraus, mit dem verglichen werden soll)

Und das Faust’sche daran, wie üblich: ich bin mehr der Meer-Typ.