Se ho un gruppo di file con estensione .htm, come posso rinominarli tutti in .html?
mv *.htm *.html
non funziona.
Se ho un gruppo di file con estensione .htm, come posso rinominarli tutti in .html?
mv *.htm *.html
non funziona.
Risposte:
Oppure, potresti usare pure bash ... (eccetto per mv, cioè ..)
for file in *.htm; do mv "$file" "${file%.htm}.html"; done
ed evita le brutte cose del nome di base. ;)
Bash ha una vasta gamma di opzioni di espansione variabili. Quello qui usato, '%', rimuove il suffisso di corrispondenza più piccolo dal valore della variabile. Il modello è un modello glob, quindi ${file%.*}funzionerebbe anche. L'operatore '%%' rimuove il suffisso di corrispondenza più grande ed è intercambiabile nell'esempio sopra, poiché lo schema è fisso, ${file%%.*}.htmltrasformerebbe abhtm in a.html.
Vedi la sezione delle sottostazioni variabili della manpage di bash per ulteriori trucchi. C'è molto che può essere fatto direttamente all'interno di bash.
Non ci dovrebbero essere spazi, newline o altri spazi bianchi nei nomi dei file, ma questa versione della risposta di Freiheit li gestisce. Utilizza anche al $()posto dei backtick per la leggibilità insieme ad altri vantaggi.
for file in *.htm
do
mv "$file" "$(basename "$file" .htm).html"
done
Ancora meglio - per il caso speciale di aggiungere solo alla fine:
for file in *.htm
do
mv "$file" "${file}l"
done
rename(1)è un'utilità Perl che fa esattamente quello che vuoi. In questo caso:
rename 's/\.htm$/.html/' *htm
o se stai usando anche sottodirectory
(richiede Bash 4.0 e l'impostazione globstar: shopt -s globstar)
rename 's/\.htm$/.html/' **/*htm
renameviene fornito con perl, e praticamente ogni unix viene fornito con perl in questi giorni.
shopt -s globstar(disattivata per impostazione predefinita). Inoltre, Linux e Unix hanno directory anziché cartelle.
for file in *.htm; do
mv $file `basename "$file" .htm`.html
done
Provalo con un echodavanti alla mvprima volta.
Il problema con l'originale è che " mv *.htm *.html" ha la *s gestita dalla shell, quindi il mvcomando vede semplicemente un elenco di tutti i file .htm e .html nella directory corrente. In altre parole, qualcosa come " mv foo.htm bar.htm stuff.htm six.htm file.htm". mv sa come gestire più di 2 argomenti solo se l'ultimo è una directory.
mvnon funzionerà.
Se usi Zsh puoi usare 'zmv'
Lo strumento migliore è mmv .
mmv \*.htm #1.html
Altri esempi di utilizzo (e di altri strumenti) in " Riepilogo degli strumenti da riga di comando GNU / Linux ".
#.
Il pacchetto util-linux-ng (su Fedora) ha un renamecomando simile a quello menzionato da TRS-80 . Puoi usarlo in questo modo:
rename .htm .html *.html
ren *.htm *.htmlfunzionerà in Windows.