for i in *;
do new=`echo "$i" | sed -e 's/^./\U&/'`;
mv "$i" "$new";
done;
Wäre der gesamte Code aufgeschlüsselt, um ihn leicht sichtbar zu machen, werde ich unten erklären.
Zuerst müssen wir sicherstellen, dass wir jede Datei verarbeiten. Die folgende Zeile bedeutet: "Gehen Sie wie folgt vor, solange Sie Dateien finden können."
for i in *;
Dann müssen wir den aktuellen Dateinamen laden (der in der Variablen $ i gespeichert ist), den ersten Buchstaben durch eine großgeschriebene Version ersetzen und den neuen Namen (in der Variablen $ new) speichern.
Der folgende Befehl bedeutet im Wesentlichen: Variable $ new ( do new=
) erstellen Laden Sie $ i und leiten Sie es ( "$i" |
) an eine Funktion weiter, die den ersten Buchstaben durch einen großgeschriebenen ersetzt. ( sed -e 's/^./\U&/'
; `)
Die sed Handbuchseite finden Sie hier . Es wird verwendet, um grundlegende Texttransformationen durchzuführen. Grundsätzlich wird ein regulärer Ausdruck (der 's/^./\U&/'
Teil) (eine Methode zum Erkennen eines bestimmten Musters in einem Text) verwendet, um nicht kapitalisierte Erstzeichen zu erkennen und durch eine großgeschriebene Version zu ersetzen.
do new=echo "$i" | sed -e 's/^./\U&/';
Nachdem wir den neuen Namen erhalten haben, ist es Zeit, die Datei mit dem neuen großgeschriebenen Namen umzubenennen. Der folgende Befehl führt dies aus.
Es heißt: Verschiebe (wie beim Umbenennen) die alte Datei foo.bar in die neue Foo.bar.
mv "$i" "$new";
Wir haben jetzt eine Datei umbenannt und es ist Zeit, zur nächsten zu wechseln. Das Folgende schließt die for-Funktion ab und teilt ihr mit, dass es jetzt Zeit ist, fortzufahren und die nächste Datei zu verarbeiten.
done;
Stapelüberlauf ist tot
quelle
sed
Großbuchstaben des Ersatzes eine GNU-sed
Erweiterung ist und auf UNIX-Systemen, auf denen ein anderessed
verwendet wird, wahrscheinlich nicht funktioniert .Hier sind einige andere Techniken, falls Sie
sed
diese nicht unterstützen\U
:Wenn Sie Bash 4 haben:
quelle
Willkommen bei Bash, wo fast alles möglich ist, wenn nicht sofort offensichtlich.
Die Erklärung von BloodPhilia ist sehr gut für Ihre spezielle Anfrage. Wenn Sie interessiert sind, finden Sie hier einige zusätzliche Webressourcen, um mehr zu erfahren:
Bash:
Sed (das ist der 'S'tream'-ED'itor):
quelle
Um jedes erste Zeichen im Dateinamen mit BASH groß zu schreiben, können Sie ein folgendes Konstrukt verwenden:
file_words=( $file ) echo "${file_words[@]^}"
Es ist viel klarer als sed und Sie verwenden nur BASH, also ist es schneller.
quelle
Und wenn Sie zsh haben:
quelle
foo=bar.baz && echo ${(C)foo}
gibtBar.Baz
). Versuchen Sie es${(C)i[1]}${i[2,-1]}
.