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...

finde alles ausser versteckten dateien (\.*)

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.

mv bzw. rename skript für .png-Graphiken

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

 
wissen/tips_und_tricks/bash.txt · Zuletzt geändert: 23.08.2006 15:21 von tirili
 
Recent changes RSS feed Donate Valid XHTML 1.0 Valid CSS Recent cached RSS feed cacert-signed web site: inhalt.serviert.de