+1 Diese Lösung funktioniert auch, wenn der Dateiname Leerzeichen enthält, Sie aber "$ f" anstelle von "f" meinen.
Adam Zalcman
Die Shell-Parametererweiterung ist etwas kryptisch, man könnte stattdessen den Basisnamen verwenden: für f in * .JPG; mache mv "$ f" "` basename $ f .JPG`.jpg "; fertig
Mathe
@math: Ich bevorzuge meine Version, da sie mit Dateinamen funktioniert, die Leerzeichen enthalten, und auch mit /path/to/*.JPG. Sie können natürlich gerne Ihre eigene Antwort einreichen :)
Johnsyweb
Natürlich entfernt der Basisname die führenden Verzeichnisse, funktioniert aber mit Leerzeichen innerhalb der Dateinamen. (Ich denke nicht, dass dies eine Antwort wert ist;) also habe ich es als Kommentar gepostet)
Mathe
10
Wenn Sie externe Tools verwenden können (nicht nur Bash), überprüfen Sie den renameBefehl!
Es wäre einfach genug, dies für Dateien mit Leerzeichen im Namen zu tun: Fügen Sie einfach doppelte Anführungszeichen um beide Argumente hinzu mv.
Adam Zalcman
Ich habe keine Leerzeichen. Was füge ich hinzu, um dies im CURRENT-Verzeichnis zu erreichen? Im Moment erhalte ich eine Fehlermeldung - mv: kann nicht angeben `* .JPG ': Keine solche Datei oder kein solches Verzeichnis
Antworten:
Verwenden der Shell-Parametererweiterung :
Die
"
Charaktere kümmern sich um Dateinamen, die Leerzeichen enthalten, wie dies bei Fotos häufig der Fall ist.quelle
/path/to/*.JPG
. Sie können natürlich gerne Ihre eigene Antwort einreichen :)Wenn Sie externe Tools verwenden können (nicht nur Bash), überprüfen Sie den
rename
Befehl!Das
rename
ist ein Teil vonutil-linux
.quelle
perl
die verschiedene Argumente akzeptiert, um dasselbe zu tun.Wenn Sie Leerzeichen in Dateinamen haben:
quelle
Ich würde vorschlagen, einen Blick auf den
mmv
Befehl zu werfen . Es ist genau für diese Art von Aufgaben geeignet. In Ihrem Szenario wäre es:Die Manpage ist voller Beispiele, daher dauert es keine Zeit, sich daran zu gewöhnen.
Auf Debian- Systemen kann es installiert werden mit:
quelle
Wenn die Dateinamen keine Leerzeichen enthalten:
quelle
mv
.