Es sed
ist zwar ein sehr nützliches und vielseitiges Werkzeug, aber Sie verwenden es nicht richtig. Es wird am besten verwendet, um Zeichenfolgen in Textdateien abzugleichen und zu ersetzen. Dateien im Dateisystem können nicht direkt umbenannt werden.
Diese Aufgabe ist besser für einen Bash-Einzeiler geeignet (vorausgesetzt, das ist Ihre Shell). So benennen Sie so etwas wie . filejpg
zu file.jpg
diesem Zweck , verwenden:
find . -name '. *' -print0 | while read -d $'\0' file; do short_file=${file%jpg}.jpg; mv "$file" "${short_file:4}"; done
Erläuterung
find
ist ein Programm, das Pfade zu Dateien zurückgibt, die einer bestimmten Dateieigenschaft entsprechen, in diesem Fall dem Dateinamen. Wenn Sie nur wissen möchten, welche JPG-Dateien sich in den Unterverzeichnissen Ihres aktuellen Pfads befinden, würden Sie dies tun find . -name "*.jpg"
. Normalerweise wird jede Datei in einer neuen Zeile ausgegeben. Das -print0
macht es stattdessen die Spiele mit einem Null - Zeichen zu trennen. Dies ermöglicht die ordnungsgemäße Behandlung von Dateinamen mit Leerzeichen, wenn die Ausgabe an die nächsten Befehle übergeben wird.
Der |
Charakter ist als Pipe bekannt. Es weist die Shell an, die Ausgabe des Befehls links zu übernehmen und als Eingabe an den Befehl rechts zu übergeben, in diesem Fall den read
Befehl innerhalb der while
Schleife.
Der read
Befehl wird verwendet, um die Ausgabe von zu übernehmen find
und einer Variablen zuzuweisen file
. Normalerweise würde dies file
jedem Wort zu einem Zeitpunkt Werte zuweisen , aber dies -d $'\0'$
führt dazu, dass die Zuweisungen durch das Nullzeichen begrenzt werden (entsprechend der Begrenzung der Dateien find
mithilfe des -print0
Flags).
Die while-Schleifen bewirken read
, dass "Datei" für jeden übereinstimmenden Dateinamen iterativ Werte zugewiesen werden. Die do
und done
sind Teil der Standard-Bash-Syntax für eine while-Schleife:
while <something is true>; do
<run some commands>
done
In diesem Fall korrigiert unser Befehl "run some" zuerst die Erweiterung des Dateinamens und weist sie einer neuen Variablen zu: short_file=${file%jpg}.jpg
Änderungen . filejpg
an . file.jpg
. Anschließend wird mv
die Datei umbenannt, wobei der .
am Anfang des erweiterungskorrigierten Dateinamens entfernte Dateiname entfernt wird : mv "$file" ${short_file:2}
.