Bilder automatisch verkleinern mit Mindestgröße

Mit nachfolgendem Befehl lassen sich alle jpg-Bilder im Verzeichnis auf eine maximale Höhe/Breite von 1024 Pixel verkleinern. Das Seitenverhältnis wird beibehalten und die größere Seite auf 1024 px reduziert. Ist ein Bild kleiner als 1024 px, wird dieses Bild nicht beeinflusst.

mogrify -resize '1024x1024>' *.jpg

Weitere Infos gibt auf der Seite von imagemagick

 

TYPO3 Update Einzeiler

Mit folgendem Konsolenkommando kann ein vorhandenes TYPO3 6.0 auf 6.0.5 aktualisiert werden:

wget get.typo3.org/6.0 -O update.tgz && tar xzf update.tgz && rm update.tgz && chown -R wwwrun:www typo3_src-6.0.5 && rm typo3_src-6.0 && ln -s typo3_src-6.0.5 typo3_src-6.0

Voraussetzung hierfür ist, dass Sie in der Konsole über die entsprechenden Berechtigungen verfügen. Auch sollten Sie sich in dem Verzeichnis befinden, in dem sich der bisherige TYPO3-Sourcen Ordner befindet.
Bevor Ihr den Einzeiler ausführt, passt bitte die einzelnen Kommandos an eure Serverumgebung an! Ich übernehme keine Garantie, dass dieser Einzeiler bei jedem korrekt funktioniert!

 

MySQL 5.1 unter Debian auf UTF8 umstellen

Bei der Installation des MySQL-Servers wurde mir dieser als Latin1 installiert.
Dies läst sich überprüfen, in dem man sich via Konsole auf der Datenbank anmeldet

mysql -u root -p

und anschließend folgenden Befehl aufruft

status;

Sollte hier noch Latin1 vorkommen, muss folgende Anpassung vorgenommen werde:
* Abmelden von der Datenbank

exit

* Erstellen einer neuen Datei namens utf8-character_set.cnf unter /etc/mysql/conf.d
* Füllen der Datei mit folgendem Inhalt:
[client]
default-character-set   = utf8
[mysql]
default-character-set   = utf8
[mysqld]
default-character-set   = utf8
default-collation   = utf8_unicode_ci
character-set-server   = utf8
collation-server   = utf8_unicode_ci

* Neustarten des MySQL-Servers mit dem Befehl

/etc/init.d/mysql restart

Nun sollte nach dem erneuten Anmelden an der Datenbank alle Werte anstatt auf Latin1 auf UTF8 stehen.

 

Verzeichnisgröße ermitteln via Bash

Um in der Bash die Verzeichnisgröße zu ermitteln hilft folgendes Kommando:

du -h --max-depth=1 .

-h gibt dabei an, dass die Größe als lesbares Format dargestellt werden soll (z.B. 1K 234M 2G)
–max-depth=1 bedeutet, dass nur die Summen der Verzeichnisse ausgegeben werden, die sich aktuell in diesem Verzeichnis befinden (also keine Unterverzeichnisse)
. bedeutet das vom aktuellen Verzeichnis ausgehend die Größe ermittelt werden soll

 

Abhilfe für Linux Fehlermeldung: /bin/rm: Die Argumentliste ist zu lang

Beim Löschen von Verzeichnissen mit sehr vielen Dateien, kann es schon mal vorkommen, das rm mit folgender Fehlermeldung aussteigt:

-bash: /bin/rm: Die Argumentliste ist zu lang

Abhilfe schafft hier, wenn der Aufruf als Schleife ausgeführt wird:

for i in *; do rm $i; done

Dadurch sollte die Grenze von 128kB unterschritten und Ihr nicht mit der Fehlermeldung belästigt werden.
Frohes Arbeiten 😉

 

Suchen und Ersetzen in Dateien unter Linux

Auch wenn statische Websites kaum mehr vorhanden sind, und meistens durch ein CMS abgelöst wurden, stößt man hin und wieder doch auf so ein „veraltetes“ System. Sollen nun in allen Dateien Änderungen vorgenommen werden, ist das meist mit großem Aufwand verbunden, da jede Datei geöffnet, geändert und gespeichert werden muss.
Zum Glück haben wir in unserem Linux-System ein sehr mächtiges Tool namens sed. sed steht für Stream EDitor und ist ein Programm, mit dem Texte auf Kommandozeilen-Ebene geändert werden können.

Hier der Aufruf von sed:

sed -i 's/SUCHMUSTER/ERSETZUNGSTEXT/g' /pfad/zur/datei

Da wir aber, wie oben schon genannt, die Änderung nicht nur in einer Datei vornehmen wollen, sondern in mehreren, kombinieren wir sed mit find:

$ find /pfad/zu/dateien -type f -exec sed -i 's/SUCHMUSTER/ERSETZUNGSTEXT/g' {} \;

Zu beachten ist, das reguläre Ausdrücke verwendet werden und somit die entsprechenden Sonderzeichen mit einem Backslash zu maskieren sind.

Welche nützlichen findsed-Kombinationen werden den von euch verwendet?

 

Dateiendungen in Kleinbuchstaben umwandeln

Des öfteren erhalte ich von Kollegen oder Kunden Dateien mit Großbuchstaben im Dateiname.
Da ich bei Websites gerne Dateinamen verwende, die komplett kleingeschrieben sind, benötigte ich einen Arbeitsschritt der mir das automatisch erledigte (mit automatisch meine ich nicht einen Praktikant ;-)).  Dank Linux und der mächtigen Bash lässt sich diese Aufgabe einfach lösen.
Folgendes Bash-Kommando wandelt die Dateiendung JPG in Kleinbuchstaben um:

for f in *.jpg; do mv $f `basename $f .jpg`.JPG; done;

Soll der komplette Dateiname kleingeschrieben werden, hilft folgendes Kommando:

ls | awk '{print "mv "$0" "tolower($0)}' | sh

Um rekursiv auch Unterordner zu beachten nimmt man dieses Kommando:

for dir in $(find -depth -type d | grep -v ^.$); do mv -v "$dir" $(dirname "$dir")/$(echo $(basename "$dir") | tr '[:upper:]' '[:lower:]') ; done;

Möglicherweise gibt es auch noch kürzere Kommandos…hat jemand Tipps?

 

Android Entwicklung mit OpenSuSE und Archos 10.1

Wie unter developer.android.com beschrieben, sollte es nach wenigen Schritten möglich sein, auf einem angeschlossenen Gerät zu entwickeln. Bei drittens wird beschrieben, wie man sein System einrichten muss, um das Gerät unter „Ubuntu Linux“ zu erkennen. Da leider keine Beschreibung zur Entwicklung unter openSuSE vorliegt, hier meine Schritte (openSuSE 11.3):

1. In der Datei „AndroidManifest.xml“ der Anwendung (App), muss diese als debugbar definiert werden. Dazu wird der Application-Tag um android:debuggable=“true“ erweitert. Alternativ kann auch im Reiter „Application“ der Wert von „Debuggable“ auf „true“ geändert werden.
vorher:

nachher:

2. Das Gerät (in meinem Fall ein Archos 10.1), muss angeschlossen sein und das „USB-Debugging“ aktiviert sein. Zur Kontrollen kann dies über ‚Einstellungen -> Anwendungen -> Entwicklung‘ geprüft werden. Hier muss bei ‚USB-Debugging‘ der Haken gesetzt sein.
3. Nun muss für die Verwendung eines Gerätes eine Regel erstellt werden. Diese Regeln (engl. rules) sind an den Hersteller gebunden. Sollten also mehrere Geräte zur Entwicklung verwendet werden, müssen in der Regel auch mehrere Einträge erstellt werden. Um eine Regel zu erstellen, wechselt man mit ‚su‚ zum root-user. Anschließend wird in das Verzeichnis ‚/etc/udev/rules.d‘ gewechselt. Hier erstellt man mit ‚vi 51-android.rules‚ eine neue Datei und füllt diese mit nachfolgendem Inhalt (i drücken um in den insert-Modus von vi zu gelangen):

SUBSYSTEMS=="usb", ATTRS{idVendor}=="0e79", MODE="0666", SYMLINK+="android_adb"
SUBSYSTEMS=="usb", ATTRS{idVendor}=="0e79", MODE="0666", SYMLINK+="android_fastboot"

Stehen noch weitere Geräte zum debuggen zur Verfügung, müssen diese darunter definiert werden. Hierzu können die beiden Zeilen kopiert und an der Stelle ‚0e79‘ abgeändert werden (0e79 steht hierbei für den Hersteller Archos). Mit der Esc-Taste wird in den command-Modus von vi gewechselt. Hier lässt sich mit dem Befehl :wq<Enter> die Datei speichern und schließen.

Nun kommt der Schritt, der in der Beschreibung zu Ubuntu nicht genannt wird. Unter OpenSuSE muss in der Datei ‚adb_usb.ini‘ (zu finden im Home-Verzeichnis im Ordner .android) zusätzlich die Hersteller-ID eingetragen werden. In meinem Fall also ‚0x0e79‘. Im Anschluss daran, kann per ‚adb kill-server‚ und ‚adb devices‚ überprüft werden, ob das Gerät erkannt wurde, oder nicht.

PS: Sollte die Hersteller-ID (idVendor) nicht bekannt sein, kann diese nach dem Anschließen des Gerätes mit folgendem Befehl ermittelt werden: ‚tail -f /var/log/messages‚. Dort sollte ein Eintrag, ähnlich dem nachfolgenden, erscheinen:

usb 1-5: New USB device found, idVendor=0e79, idProduct=1411

In Eclipse kann nun bei einem Klick auf ‚Run‘ die Anwendung auf dem Gerät getestet werden.

 

Verzeichnis mit sshfs mounten

Bei meiner täglichen Arbeit hatte ich das Problem, dass sich die Samba-Freigabe des Servers nicht zufriedenstellend einbinden ließ. Da am Server eine Anmeldung per ssh möglich war, lag einem Zugriff per sshfs nichts im Wege. Mit folgendem Befehl konnte ich das entfernte Verzeichnis einbinden und so wie auf lokale dateien zugreifen.

sshfs benutzername@remotemaschine:/pfad/ /mnt/mountpoint -o allow_other