Mehr Datein umbenennen, auch solche mit Leerzeichen
Mehr Datein umbenennen, auch solche mit Leerzeichen
Hallo!
Ich will alle Dateien in einem Verzeichnis eine Dateiendung anhängen. Das sollte folgende Zeile erledigen:
for tmp in $(ls); do mv $tmp $tmp.ogg; done
Die Dateien haben allerdings Leerzeichen im Namen, wie muss ich mein Script jetzt anpassen?
Alternative könntet ihr mir auch erklären wie ich in allen Dateinamen das Leerzeichen durch einen Unterstrich _ erstetzte.
Danke schon mal,
Gruss
Steve
Ich will alle Dateien in einem Verzeichnis eine Dateiendung anhängen. Das sollte folgende Zeile erledigen:
for tmp in $(ls); do mv $tmp $tmp.ogg; done
Die Dateien haben allerdings Leerzeichen im Namen, wie muss ich mein Script jetzt anpassen?
Alternative könntet ihr mir auch erklären wie ich in allen Dateinamen das Leerzeichen durch einen Unterstrich _ erstetzte.
Danke schon mal,
Gruss
Steve
Ich? Nein, ich bin keine Signatur, ich mach hier nur sauber...
- mathias.bonert
- Beiträge: 53
- Registriert: 15.06.2007 20:34:28
- Lizenz eigener Beiträge: GNU Free Documentation License
Hi,
um mehrere Dateien auf einmal umzubenennen koenntest du auch "mmv" verwenden.
um mehrere Dateien auf einmal umzubenennen koenntest du auch "mmv" verwenden.
Roland
"Aber wenn du schon so unwissend bist, davon noch nicht gehört zu haben,
so will ich es doch als gut ansehen, daß du lieber einmal töricht fragst,
als weiterhin nichts von etwas zu wissen, das man doch wissen sollte."
aus "Die Edda des Snorri Sturluson", "Gylfis Täuschung"
"Aber wenn du schon so unwissend bist, davon noch nicht gehört zu haben,
so will ich es doch als gut ansehen, daß du lieber einmal töricht fragst,
als weiterhin nichts von etwas zu wissen, das man doch wissen sollte."
aus "Die Edda des Snorri Sturluson", "Gylfis Täuschung"
Für sowas gibt's das Skript 'prename'.
Man muss sich ein wenig mit Regular Expressions (RE) auskennen. Wenn man aber nicht zu kompliziertes machen will reicht der normale Menschenverstand (glaube ich )
Obiges Problem reduziert sich auf
Die RE bedeutet: ersetze das Ende des Strings ($) durch den String '.ogg'.
Code: Alles auswählen
Usage: rename [-v] [-n] [-f] perlexpr [filenames]
Obiges Problem reduziert sich auf
Code: Alles auswählen
prename 's/$/.ogg/' *
Nein, man ersetzt ja nur einen Teil des Strings, hier eben das Ende, das mit dem Spezialzeichen '$' symbolisiert wird.Duff hat geschrieben: Normalerweise müsste man ja bei der Benutzung von RE alles bis zum Ende speichern und bei der Ersetzung darauf zurückgreifen und das gewünschte hinten anhängen.
Wenn Du zB in allen Dateien alle Unterstriche durch Leerzeichen ersetzen wolltest, ginge das so:
Code: Alles auswählen
prename 's/_/ /g' *
Natürlich lassen sich auch komplexe Sachen machen. Wenn man zB das Format "Artist - Title.mp3" hat, aber lieber "Title - Artist.mp3" hätte, geht das so:
Code: Alles auswählen
prename 's/^(.*) - (.*).mp3/$2 - $1.mp3/' *
Eine Doku bekommst Du mittels
Code: Alles auswählen
perldoc perlre
wenn du stat ls find benuzt funktioinirt es auch. und ich finde das skirpt is so einfach viel schöner.
Code: Alles auswählen
for tmp in $(find)
do mv $tmp $tmp.ogg
done
Würde ja mal sagen, viele Wege führen nach Rom, aber bei mir funktioniert es so nicht!
Die Datei test leer wird kann nicht wirklich umbenannt werden.
Code: Alles auswählen
daniel@daniel-laptop:/tmp$ find . -maxdepth 1 -type f -a -name "t*" -exec ls {} \;
./test.t.oo
./test leer
daniel@daniel-laptop:/tmp$ for i in $(find . -maxdepth 1 -type f -a -name "t*"); do
> mv $i $i.oo
> done
mv: Aufruf von stat für »./test« nicht möglich: Datei oder Verzeichnis nicht gefunden
mv: Aufruf von stat für »leer« nicht möglich: Datei oder Verzeichnis nicht gefunden
Oh, yeah!
Hier musst Du die Leerzeichen aber noch durch Anführungszeichen schützen "$tmp" statt nur $tmp.gladiator hat geschrieben:wenn du stat ls find benuzt funktioinirt es auch. und ich finde das skirpt is so einfach viel schöner.Code: Alles auswählen
for tmp in $(find) do mv $tmp $tmp.ogg done
Aber dann doch lieber gleich nur das find
Code: Alles auswählen
find ./ -name '*.mp3' -exec mv {} {}.ogg \;