Linux Dateisysteme erlauben Case sensitive Dateinamen, d.h. "abc" und "ABC" sind zwei unterschiedliche Dateien. Vor dem Überspielen auf NTFS oder vor Verwendung im CIFS Netzwerk ist daher eine Prüfung auf solche Fälle nützlich.
Der folgende Einzeiler ist nicht groß kommentiert, wer es braucht wird wissen wie es zu verwenden ist.
Achtung: Das Skript ist etwas lahm (bei einer großen Platte muss man durchaus 1 Stunde Laufzeit rechnen) und es gibt keine Fortschrittsanzeige, deshalb erst an einem kleineren Verzeichnis testen. Zur Prüfung kann man irgendwo einen Problemfall einbauen.
Ausgegeben werden nur doppelte Dateinamen, bleibt die Ausgabe leer, ist das Laufwerk "sauber."
Die Zahl der gefundenen doppelten Dateien wird zu Anfang angegeben.
Ist die Zahl 0, handelt es sich um ein Problem mit dem Zeichensatz.
Linux bash oder Bourne shell:
find "$PWD" -exec sh -c 'i="{}"; cnt=$( find "$(dirname "$i")" -maxdepth 1 -iname "$(basename "$i")"| wc -l) ; l0=$(find "$(dirname "$i")" -maxdepth 0 -iname "${i##*/}"); res="$l0/$(basename "$i")"; if [ x"$res" = x"$i" ]; then cnt=$((cnt-1)); fi; if [ $cnt -gt 1 ]; then echo - $cnt; echo $(dirname "$i")/$(basename "$i") "<--"; find $(dirname "$i") -maxdepth 1 -iname "${i##*/}" ; fi; ' \;
Ausgabe:
- 3
/srv/dev-disk-by-label-sg8tbru/_uIntenso3tb/##HD/##PVR/tmp/mc-root/Cde <--
/srv/dev-disk-by-label-sg8tbru/_uIntenso3tb/##HD/##PVR/tmp/mc-root/cde
/srv/dev-disk-by-label-sg8tbru/_uIntenso3tb/##HD/##PVR/tmp/mc-root/CDE
/srv/dev-disk-by-label-sg8tbru/_uIntenso3tb/##HD/##PVR/tmp/mc-root/Cde
- 3
/srv/dev-disk-by-label-sg8tbru/_uIntenso3tb/##HD/##PVR/tmp/mc-root/ABC <--
/srv/dev-disk-by-label-sg8tbru/_uIntenso3tb/##HD/##PVR/tmp/mc-root/abC
/srv/dev-disk-by-label-sg8tbru/_uIntenso3tb/##HD/##PVR/tmp/mc-root/abc
/srv/dev-disk-by-label-sg8tbru/_uIntenso3tb/##HD/##PVR/tmp/mc-root/ABC
- 2
/srv/dev-disk-by-label-sg8tbru/_uIntenso3tb/##HD/##PVR/tmp/XYZ <--
/srv/dev-disk-by-label-sg8tbru/_uIntenso3tb/##HD/##PVR/tmp/xyz
/srv/dev-disk-by-label-sg8tbru/_uIntenso3tb/##HD/##PVR/tmp/XYZ