Suchen & Ersetzen

Oh man, wie oft vergesse ich das noch…

Ersetzt „tabelle1“ durch „tabelle2“ in der Datei dump.sql:

sed -i -e 's/tabelle1/tabelle2/' dump.sql

Ersetzt in allen PHP-Dateien rekursiv den String „name1“ durch „name2“ – aber nur in den Zeilen wo der String „user“ vorkommt:

find . -type f -name "*php" -exec sed -i -e '/user/ s/name1/name2/' {} \;

Plesk: DNS-Zonen auf neue Serial umstellen

Plesk kann seit Version 8.6 auch mit RIPE-Konformen Zonen-Serials umgehen. Um in einem Rutsch sämtliche Domains auch einem Server auf das neue Format umzustellen reichen folgende Befehle (vorher Backup anlegen!):

Neue Serial setzen (natürlich auf aktuelles Datum anpassen):

mysql -Ns -u admin -p`cat /etc/psa/.psa.shadow` -D psa \
-e "UPDATE dns_zone SET serial_format = 'YYYYMMDDNN', serial = '2009022000' "

Alle Zonen im Bind updaten:

mysql -Ns -u admin -p`cat /etc/psa/.psa.shadow` -D psa \
-e 'SELECT name FROM dns_zone' \
| awk '{print " /usr/local/psa/admin/sbin/dnsmng update " $1}' | sh

Den zweiten Befehl habe ich hier abgeleitet. Da einige Programme keine Argumente über die Standardeingabe (stdin) annehmen (oder mangels Dokumentation nicht klar ist, ob sie das tun) finde ich es eigentlich ganz elegant, das Kommando mittels awk zusammenzubauen und dann zeilenweise auszuführen.

Verwendete Typo3-Versionen auflisten

Auf Shared-Hosting Systemen werden Typo3-Installationen meist mittels Symlinks zu einer einzigen Typo3_src Installation verlinkt. Aus Kompatibilitätsgründen gibt es aber oft unterschiedliche Versionen parallel auf einem Server.

Aus aktuellem Anlass wollte ich herausfinden, welche Versionen noch auf dem Server laufen:

find /var/www -name typo3_src -type l \
-exec /bin/sh -c "ls -l {}" \; | awk '{printf "%35-s %s\n", $11, $9}'

typo3_versions

PS. Den awk-Kram kann man auch weglassen – ich finde es aber so übersichtlicher.

find -exec mit Pipe

„find“ ist noch mächtiger in Zusammenhang mit dem „-exec“ Parameter – bisher war mir aber nicht klar wie man eine Pipe innerhalb des -exec Abschnitts benutzen kann:

find . -type f -exec sh -c 'cat {} | grep "hello world"' ;

Der Trick ist eine Shell (in diesem Falle „sh“) aufzurufen. Das Kommando oben ist nur ein Beispiel und macht natürlich keinen Sinn ;-).