====== 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]]