Dateiendung in Kleinschrift

U

uhbuntuh

Jungspund
Hallo!
Ich suche ein Skript um großgeschriebene Dateienungen in Kleinschrift zu bringen. Also ".TXT" -> ".txt".

Habe hier im Forum auch schon nützliches gefunden:
Code:
for F in $(find -type f -name "*TXT");
do
	mv  "$F" "${F%\.TXT}.txt";
done

Allerdings soll das ganze nicht nur für txt-Dateien gehen, sondern für beliebige Dateiendungen.

Wie kann ich die Dateiendung mit bash auslesen? Oder hat jemand ein solches Skript bereits parat?

Vielen Dank!
 
Hallo

Wenn du keine Leerzeichen erwartest, sollte folgender ungetesteter Schnellschuß laufen:
Code:
for i in $(find ./ -type f); do echo "$i" "${i%\.*}.$(echo ${i##.*\.}|tr 'A-Z' 'a-z')";done
echo durch mv ersetzen
Mit Leerzeichen, arbeite mit while read. Das Prinzip bleibt das gleiche.

Gruß Wolfgang
EDIT Lösung für Leerzeichen
Code:
find /path/to/files -type f |while read file;
do
echo "$file" "${file%\.*}.$(echo ${file##.*\.}|tr 'A-Z' 'a-z')";done
 
Zuletzt bearbeitet:
Eine Lösung zum gruseln :s

Hier das ganze, wenn man noch nie was von 'tr' gehört hat und nicht wirklich mit dem ${var%} Dingens umgehen kann :D
(Funktioniert auch nur, wenn keine Leerzeichen vorkommen)
Code:
for file in $(find . -type f -regex '.+\.[A-Z]+');
do
    datei_name=${file%\.*}
    datei_endung=$(echo $file|egrep -o '\.[[:upper:]]+')
    endung_lower=$(echo $datei_endung|sed -e 'y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/')
    neu="$datei_name$endung_lower"
    mv $file $neu
done

Hm, dieses 'tr' scheint verdammt praktisch zu sein. 'tr [:upper:] [:lower:]' schreibt sich _wesentlich_ leichter als das gesamte Alphabet (doppelt :/) mit dem 'y' Kommando von sed :D
lg euer inzwischen in 'man bash' vertiefte Gott in schwarz
 
Ich verneige mich zutiefst. Vielen Dank für die Hilfe!
.
.
.
EDIT (autom. Beitragszusammenführung) :
.

ich habe das ganze jetzt in ein kleines skript gepackt.
wäre nett wenn ihr mir sagen könnten, ob das so in ordnung ist oder was man noch verbessern kann.
sollte man z.B. die gefundenen dateinamen anstatt einer datei in ein array o.ä. speichern?

Code:
temp="~endung_klein.txt"

find ./ -type f | while read file;
do
if [ "${file##.*\.}" != "$(echo ${file##.*\.}|tr 'A-Z' 'a-z')" ]; then echo "$file" | tee -a $temp; fi;done

while [ ! "$go" = "y" ]
do
	echo -n "Dateiendungen in Kleinschrift konvertieren? [y/n]: "; read go
	if [ "$go" = "n" ]; then 
		if [ -f $temp ]; then rm $temp; fi
		exit 0; 
	fi
done

cat $temp | while read file;
do
mv "$file" "${file%\.*}.$(echo ${file##.*\.}|tr 'A-Z' 'a-z')";done

if [ -f $temp ]; then rm $temp; fi
 
Zuletzt bearbeitet:
Zauberwort ist tr. man tr.

Groß -> Klein:
Code:
tr '[:upper:]' '[:lower:]'
 

Ähnliche Themen

Shell Skript beschleunigen

Summe von Zahlen in einer Zeilen bilden

Welches Linux/Unix für ehemaligen OSX Nutzer?

Telefoninterview (Wie sich auf Bash-Shell-Fragen vorbereiten?)

HandbrakeCLI Shell Skript

Zurück
Oben