Wie kann ich eine Dateigruppe mit der Erweiterung .htm in .html umbenennen?
mv *.htm *.html
funktioniert nicht.
Wie kann ich eine Dateigruppe mit der Erweiterung .htm in .html umbenennen?
mv *.htm *.html
funktioniert nicht.
Antworten:
Oder Sie könnten reine Bash verwenden ... (außer MV, das ist ..)
for file in *.htm; do mv "$file" "${file%.htm}.html"; done
und vermeiden Sie die bösen Basisnamen Zeug. ;)
Bash bietet eine Vielzahl variabler Erweiterungsoptionen. Der hier verwendete Wert '%' entfernt das kleinste übereinstimmende Suffix aus dem Wert der Variablen. Das Muster ist ein Glob-Muster, ${file%.*}
würde also auch funktionieren. Der Operator '%%' entfernt das größte übereinstimmende Suffix und ist im obigen Beispiel austauschbar, da das Muster festgelegt ist, ${file%%.*}.html
würde er jedoch abhtm in a.html umwandeln.
Weitere nützliche Tricks finden Sie im Abschnitt zur variablen Substitution auf der bash-Manpage. Es gibt eine Menge, die direkt in bash erledigt werden kann.
Die Dateinamen sollten keine Leerzeichen, Zeilenumbrüche oder andere Leerzeichen enthalten, aber diese Version von freiheit's answer behandelt diese. $()
Anstelle von Backticks werden auch Informationen zur besseren Lesbarkeit sowie andere Vorteile verwendet.
for file in *.htm
do
mv "$file" "$(basename "$file" .htm).html"
done
Noch besser - für den speziellen Fall, dass nur das Ende hinzugefügt wird:
for file in *.htm
do
mv "$file" "${file}l"
done
rename(1)
ist ein Perl-Dienstprogramm, das genau das tut, was Sie wollen. In diesem Fall:
rename 's/\.htm$/.html/' *htm
oder wenn Sie auch Unterverzeichnisse verwenden
(erfordert Bash 4.0 und die globstar Einstellung: shopt -s globstar
)
rename 's/\.htm$/.html/' **/*htm
rename
kommt mit Perl, und im Grunde kommt heutzutage jeder Unix mit Perl.
shopt -s globstar
aktiviert ist (standardmäßig deaktiviert ). Außerdem haben Linux und Unix Verzeichnisse anstelle von Ordnern.
for file in *.htm; do
mv $file `basename "$file" .htm`.html
done
Probieren Sie es mit einem echo
vor dem mv
ersten Mal herum.
Das Problem mit Ihrem Original ist, dass " mv *.htm *.html
" das *
s von der Shell verarbeitet wird, sodass der mv
Befehl einfach eine Liste aller .htm- und .html-Dateien im aktuellen Verzeichnis anzeigt. Mit anderen Worten, so etwas wie " mv foo.htm bar.htm stuff.htm six.htm file.htm
". mv kann nur mit mehr als 2 Argumenten umgehen, wenn das letzte ein Verzeichnis ist.
mv
nicht funktioniert.
Wenn Sie Zsh verwenden , können Sie 'zmv' verwenden
Das beste Werkzeug ist mmv .
mmv \*.htm #1.html
Andere Anwendungsbeispiele (und andere Tools) in " GNU / Linux Command-Line Tools Summary ".
#
.
Das Paket util-linux-ng (unter Fedora) hat einen rename
Befehl ähnlich dem von TRS-80 erwähnten . Du kannst es so benutzen:
rename .htm .html *.html
ren *.htm *.html
wird in Windows arbeiten.