Kategorie: OSX

Kleines Shell Script zum Auffinden von Bildern mit gewisser Größe

Voraussetzungen:

  • Bash
  • find, awk
  • identify von ImageMagick oder GraphicsMagick
#!/bin/bash

MIN_WIDTH=240
MIN_HEIGHT=200

# internal field separator, https://bash.cyberciti.biz/guide/$IFS
# changed to make file names with spaces work
OIFS="$IFS"
IFS=$'\n'
# find all files with type image
for image in `find . -type f -exec file {} \; | awk -F: '{if ($2 ~/image/) print $1}'`; do
# get image dimensions (width/height), ignore errors
       width_and_height=`identify -format '%w %h' "$image" 2>/dev/null`
       if test -n "$width_and_height"; then
               width=`echo "$width_and_height" | awk '{print $1}'`
               height=`echo "$width_and_height" | awk '{print $2}'`

               if [ "$width" -lt $MIN_WIDTH ] || [ "$height" -lt $MIN_HEIGHT ]; then
                       echo "wrong dimensions: $image $width x $height"
               fi
       else
               echo "unable to get image dimensions for $image"
       fi
done
IFS="$OIFS"

[bash] VCS Info im Shell-Prompt

folgender Code in der .bashrc zeigt den VCS-Status (git oder svn) des aktuellen Verzeichnisses an.
Getestet unter Windows8/cygwin, sollte aber auf jeder Plattform funktionieren (wenn eine bash verwendet wird).
export LC_MESSAGES=C ist nötig wenn svn oder git lokalisierte Meldungen ausgeben (ein ewiges Ärgernis).


export LC_MESSAGES=C
GREEN="\[\033[0;32m\]"
LIGHT_GREEN="\[\033[1;32m\]"
GRAY="\[\033[1;30m\]"
LIGHT_BLUE="\[\033[1;34m\]"
LIGHT_GRAY="\[\033[0;37m\]"
COLOR_OFF="\[\e[0m\]"
function prompt_func() {
branch_pattern="\* ([^$IFS]*)"
PS1="$LIGHT_GRAY\u$COLOR_OFF $LIGHT_GREEN\w$COLOR_OFF"
if [[ -d "./.git" && "$(git branch --no-color 2> /dev/null)" =~ $branch_pattern ]]; then
branch="${BASH_REMATCH[1]}"
PS1+=":$LIGHT_BLUE$branch$COLOR_OFF"
elif [[ -d "./.svn" ]]; then
path_pattern="URL: ([^$IFS]*).*Repository Root: ([^$IFS]*).*Revision: ([0-9]*)"
if [[ "$(svn info 2> /dev/null)" =~ ${path_pattern} ]]; then
branch=${BASH_REMATCH[1]##`expr ${BASH_REMATCH[2]}`}
revision="${BASH_REMATCH[3]}"
PS1+=":$LIGHT_BLUE$branch$GRAY@$revision$COLOR_OFF"
fi
fi
PS1+=" "
}
PROMPT_COMMAND=prompt_func

Mavericks (OS X 10.9) Upgrade Notes WIP

Problem: Virtual Box not working
Solution: Manually load kernel modules


#!/bin/bash

sudo kextload -r "/Library/Extensions/" "/Library/Extensions/VBoxDrv.kext"
sudo kextload -r "/Library/Extensions/" "/Library/Extensions/VBoxNetFlt.kext"
sudo kextload -r "/Library/Extensions/" "/Library/Extensions/VBoxNetAdp.kext"
sudo kextload -r "/Library/Extensions/" "/Library/Extensions/VBoxUSB.kext"

source

Problem: MacPorts upgrade fails
Solution: Reinstall MacPorts

  • Follow steps 1, 2 & 3 of the Migration page: https://trac.macports.org/wiki/Migration
  • Install XCode 5 and Lauch XCode to install the commandline-tools
  • Get MacPorts-Source, extract & configure

  • curl -O https://distfiles.macports.org/MacPorts/MacPorts-2.2.0.tar.bz2

    tar jxvf MacPorts-2.2.0.tar.bz2

    cd MacPorts-2.2.0

    CC=/usr/bin/cc ./configure --prefix=/opt/local --with-install-user=root \
    --with-install-group=admin --with-directory-mode=0755 --enable-readline

  • make && make install

iTerm2 und tmux

Als vermeintlich bessere Alternative (dazu habe ich noch keine eigene Meinung) zu screen bietet sich tmux als Terminal Multiplexer an. Nachdem tmux seit dem letzten Beta Release von iTerm2 stark in darin integriert ist, werde ich mir das einmal näher ansehen.

Links:

Postfix: alle mails kriegen

Manchmal machts (vorallem auf Entwicklungsservern) Sinn alle ausgehenden Mails unabhängig von der Empfängeradresse an einen Empfänger zuzustellen.

Postfix macht einem sowas recht einfach.

Nehmen wir an wir wollen alles an catchall@mydomain.invalid zustellen.

Als erstes tragen folgendes in die /etc/postfix/main.cf ein


always_bcc=catchall@mydomain.invalid
transport_maps = hash:/etc/postfix/transport

Damit werden schon mal alle Mails als bcc an catchall@mydomain.invalid gesendet.

Als 2. Schritt konfigurieren wir die Transport-Table (/etc/postfix/transport) so daß nur an diese Adresse zugestellt wird.


catchall@mydomain.invalid :
* discard:silently

Die erste Zeile bewirkt daß Mails an catchall@mydomain.invalid „normal“ zugestellt werden.
Die 2 Zeile verwirft Mails an alle anderen Empfänger.

Ruby Einzeiler, um Dateien umzubenennen

ruby -e 'Dir.glob("*JPG") { |n| `mv #{n} #{n.sub(/JPG/, "jpg")}`}'

ack – Better than grep

ack ist ein Tool ähnlich grep, nur um einiges schneller und besser, wenn es darum geht eine große Menge an Sourcecode zu durchsuchen.

ack ist in Perl geschrieben und funktioniert demnach auf allen Betriebssystemen, auf denen auch Perl läuft.

Meiner Meinung nach die interessantesten Vorteile (mehr dazu auf der ack Website):

  • Geschwindigkeit (durchsucht nur die Files, die mich interessieren)
  • durchsucht von Haus aus rekursiv und ignoriert Verzeichnisse wie .svn, binäre Dateien, Backup Dateien, usw.
  • man kann ganz simpel angeben, welche Dateien durchsucht werden sollen, z.B.
    ack --php [begriff]
  • Color-Highlighting der Ergebnisse und
Anfrage