====== Tips und Tricks zur Shell ======
===== Dateien kontrolliert löschen =====
Problematik:\\
Wenn man mittels ''find -type f | xargs rm'' Dateien löscht, kann es beispielsweise auf Samba-Shares dazu kommen, dass Dateien gelöscht werden, die man gar nicht löschen möchte, da diese Leerstellen enthalten und durch den rm-Befehl als zwei oder mehr Dateien interpretiert werden.
Abhilfe schafft hier der folgende Befehl, durch den jede Ausgabe des find-Befehls durch ein "Ascii-0" beendet wird, die entsprechend durch das xargs -0 verarbeitet werden kann.
find . -type f -print0 | xargs -0 rm
===== finde alles außer... =====
find . -type f -a -not -name "\.*"
find / \! -name "*.c" -print
Print out a list of all the files whose names do not end in .c.
find / -newer ttt -user wnj -print
Print out a list of all the files owned by user ``wnj'' that are
newer than the file ttt.
find / \! \( -newer ttt -user wnj \) -print
Print out a list of all the files which are not both newer than
ttt and owned by ``wnj''.
find / \( -newer ttt -or -user wnj \) -print
Print out a list of all the files that are either owned by
``wnj'' or that are newer than ttt.
find . -newerct '1 minute ago' -print
Print out a list of all the files whose inode change time is more
recent than the current time minus one minute.
===== Das ultimative rename/mv Skript =====
Wenn man Dateien, die Leerstellen enthalten umbenennen möchte und zugleich auch noch die Großbuchstaben automatisch in Kleinbuchstaben umwandeln möchte, so hilft folgendes Skript.
PREFIX="/gallery/pic_"
find -name "*.png" -printf "DATEI=\"%f\"\n" | \
while read filename
do
eval $filename
NEU=$(echo $DATEI | tr '[A-Z ]' '[a-z_]')
eval mv \"$DATEI\" \"$PREFIX_$NEU\"
done
===== Variablen-Substitution =====
Problematik: Will man in einem Skript Variablen mit Default-Werten vorbelegen (z.B. ein Übergabeparameter, der nicht angegeben wurde), so verwendet man folgende Syntax:
VAR=${VARIABLE:-defaultwert}
Im Falle des Übergabeparameters $1 sieht das so aus (im Beispiel soll $1 mit dem Wert /var/log belegt werden):
LOGDIR=${1:-/var/log}
====== Links ======
[[http://www.injunea.demon.co.uk/index.htm|Solaris Skripting]]