567 Stimmen

Wie benenne ich die Erweiterung einer Reihe von Dateien um?

In einem Verzeichnis habe ich ein Bündel von *.html Dateien. Ich würde sie gerne alle umbenennen in *.txt

Wie kann ich das tun? Ich verwende die Bash-Shell.

780voto

ghostdog74 Punkte 305138

Wenn Sie bash verwenden, brauchen Sie keine externen Befehle wie sed, basename, rename, expr usw.

for file in *.html
do
  mv "$file" "${file%.html}.txt"
done

418voto

Mikael Auno Punkte 8720

Für eine bessere Lösung (mit nur Bash-Funktionalität, im Gegensatz zu externen Aufrufen), siehe eine der anderen Antworten .


Das Folgende würde genügen und erfordert nicht, dass das System über die rename Programm (auch wenn Sie dies in den meisten Fällen auf einem System haben):

for file in *.html; do
    mv "$file" "$(basename "$file" .html).txt"
done

EDIT : Wie in den Kommentaren erwähnt, funktioniert dies nicht bei Dateinamen mit Leerzeichen, wenn sie nicht in Anführungszeichen gesetzt werden (jetzt oben hinzugefügt). Wenn Sie nur an Ihren eigenen Dateien arbeiten, von denen Sie wissen, dass sie keine Leerzeichen im Dateinamen haben, wird dies funktionieren, aber wenn Sie etwas schreiben, das später wiederverwendet werden könnte, lassen Sie die richtige Anführungszeichen nicht aus.

208voto

Amber Punkte 473552
rename 's/\.html$/\.txt/' *.html

macht genau das, was Sie wollen.

154voto

Steven Lizarazo Punkte 5070

Dies funktionierte bei mir unter OSX von .txt zu .txt_bak

find . -name '*.txt' -exec sh -c 'mv "$0" "${0%.txt}.txt_bak"' {} \;

105voto

DaveR Punkte 9360

Sie möchten Folgendes verwenden rename :

rename -S <old_extension> <new_extension> <files>

rename -S .html .txt *.html

Dies bewirkt genau das, was Sie wollen - es ändert die Erweiterung von .html zu .txt für alle Dateien, die *.html .

Anmerkung: Greg Hewgill weist korrekterweise darauf hin, dass es sich hierbei nicht um ein Bash-Builtin, sondern um einen separaten Linux-Befehl handelt. Wenn Sie nur etwas für Linux benötigen, sollte dies gut funktionieren; wenn Sie etwas plattformübergreifendes benötigen, schauen Sie sich eine der anderen Antworten an.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X