Jeśli mam grupę plików z rozszerzeniem .htm, jak mogę zmienić ich nazwy na .html?
mv *.htm *.html
nie działa.
Jeśli mam grupę plików z rozszerzeniem .htm, jak mogę zmienić ich nazwy na .html?
mv *.htm *.html
nie działa.
Odpowiedzi:
Lub możesz użyć czystej bash ... (oprócz mv, to znaczy ...)
for file in *.htm; do mv "$file" "${file%.htm}.html"; done
i unikaj nieprzyjemnych rzeczy basename. ;)
Bash ma bogaty zestaw zmiennych opcji ekspansji. Zastosowany tutaj „%” usuwa najmniejszy zgodny sufiks z wartości zmiennej. Wzór jest wzorem globalnym, więc ${file%.*}
też by działał. Operator „%%” usuwa największy pasujący sufiks i jest wymienny w powyższym przykładzie, ponieważ wzorzec jest ustalony, ${file%%.*}.html
zmieniłby abhtm w a.html.
Zobacz sekcję zmiennego podstrona strony podręcznika bash, aby uzyskać więcej schludnych sztuczek. Jest wiele rzeczy, które można zrobić bezpośrednio w bash.
W nazwach plików nie powinno być spacji, znaków nowej linii ani innych białych znaków, ale ta wersja odpowiedzi freiheit obsługuje je. Używa również $()
zamiast backticks dla czytelności wraz z innymi korzyściami.
for file in *.htm
do
mv "$file" "$(basename "$file" .htm).html"
done
Jeszcze lepiej - w specjalnym przypadku dodawania tylko do końca:
for file in *.htm
do
mv "$file" "${file}l"
done
rename(1)
to narzędzie Perla, które robi dokładnie to, co chcesz. W tym przypadku:
rename 's/\.htm$/.html/' *htm
lub jeśli używasz również podkatalogów
(wymaga Bash 4.0 i ustawienie globstar: shopt -s globstar
)
rename 's/\.htm$/.html/' **/*htm
rename
pochodzi z perla, i w zasadzie każdy unix ma teraz perla.
shopt -s globstar
(domyślnie wyłączona). Ponadto Linux i Unix mają katalogi zamiast folderów.
for file in *.htm; do
mv $file `basename "$file" .htm`.html
done
Wypróbuj go ze związkiem echo
przed mv
pierwszym razem.
Problem z oryginałem polega na tym, że „ mv *.htm *.html
” ma *
s obsługiwane przez powłokę, więc mv
polecenie po prostu wyświetla listę wszystkich plików .htm i .html w bieżącym katalogu. Innymi słowy, coś w stylu „ mv foo.htm bar.htm stuff.htm six.htm file.htm
”. mv wie, jak obsługiwać więcej niż 2 argumenty, jeśli ostatni jest katalogiem.
mv
nie działa.
Jeśli używasz Zsh , możesz użyć „zmv”
Najlepszym narzędziem jest mmv .
mmv \*.htm #1.html
Inne przykłady użycia (i innych narzędzi) w „ Podsumowaniu narzędzi wiersza poleceń GNU / Linux ”.
#
.
Pakiet util-linux-ng (w Fedorze) ma rename
polecenie podobne do polecenia wspomnianego przez TRS-80 . Możesz użyć tego w następujący sposób:
rename .htm .html *.html
ren *.htm *.html
będzie działać w systemie Windows.