Dateien nach ihren Endungen in passende Verzeichnisse verschieben

Datum: 2004-09-29
Quelle: suse-programming-e

Worum ging es?

Alle Dateien in einem Verzeichnis sollen in zu ihren Endungen passende Unterverzeichnisse verschoben werden.

Code
# lies alle Eintraege im aktuellen Verzeichnis
# read all entries in current directory (including .dot files)
ls -a | while read f; do
  # weiter, wenn es keine regulaere Datei ist / skip if it's not a regular file
  test -f "$f" || continue
  # Endung ermitteln (Teil nach dem letzten Punkt) / get extension (part after last dot)
  ext="`echo \"$f\" | sed 's/.*\.//'`"
  # keine Endung: weiter / no extension: skip
  test "$f" = "$ext" && continue
  # in Kleinbuchstaben umwandeln, um pdf-, PDF-, Pdf-Verzeichnisse zu verhindern
  # translate to lowercase to avoid pdf, PDF, Pdf ... directories
  ext="`echo \"$ext\" | tr '[:upper:]' '[:lower:]'`"
  # Verzeichnis anlegen, wenn nicht existent / create directory if it does not exist
  test -d "$ext" || mkdir "$ext"
  # Datei in das Verzeichnis verschieben / move file into directory
  mv "$f" "$ext"
done
Beschreibung

Die Erklärungen finden sich diesmal im Source-Code, da ich die Lösung damals auch so gepostet hatte.