Sortiere Dateien auf USB-Stick

Hintergrund

MP3-Player lesen Dateien des Dateisystems nicht sortiert ein, sondern so wie es geschrieben wurde. ls tut so als wäre alles sortiert, aber ls -U entlarvt wie es wirklich aussieht.

Hinweis: Das Skript ist nicht beschränkt auf USB-Sticks. Es funktioniert mit einem beliebigen Verzeichnis.

Die Idee

  • Gehe durch alle Verzeichnisse.
  • Verschiebe alle Dateien in ein temporäres Verzeichnis.
  • Lies die sortierte Dateiliste aus dem temporären Verzeichnis.
  • Verschiebe alle Dateien nacheinander zurück.

Skript

Achtung Betaversion: Funktioniert für mich, aber ich übernehme keine Garantie!

Quelltext des Skripts - einfach per Copy'n'Paste mitnehmen:

#!/bin/bash
#
# Sortiert die Dateien in allen Verzeichnissen neu.
#
if [ "x$1" == "x" ]; then
  echo "Error: path missing"
  exit 1
fi
TARGET="$1"

if [ ! -d $TARGET ]; then
  echo "Error: not a directory"
  exit 1
fi

IFS=$'\n'
cd "$TARGET"
DIRS=$(find . -type d)

# tmp directory
TMPDIR=$(mktemp -d --tmpdir="$TARGET")

for i in $DIRS; do
  if [ "$i" == "." ]; then continue; fi 
  mkdir "$TMPDIR/$i"
  for file in `find "$i" -type f`; do
    mv "$file" "$TMPDIR/$i"/
  done
  # alle dateien sind ins tmpdir verschoben
  # kopiere alle dateien einzeln sortiert zurück
  for file in `find $TMPDIR/"$i" -type f |sort`; do
    mv "$file" "$i"
  done
done
rm -rf $TMPDIR
 
bash/sortiere_dateien_auf_usb-stick.txt · Zuletzt geändert: 2010/02/04 21:57 von frank
 
Recent changes RSS feed Creative Commons License Donate Powered by PHP Valid XHTML 1.0 Valid CSS Driven by DokuWiki