Если у меня есть группа файлов с расширением .htm, как я могу переименовать их все в .html?
mv *.htm *.html
не работает.
Если у меня есть группа файлов с расширением .htm, как я могу переименовать их все в .html?
mv *.htm *.html
не работает.
Ответы:
Или вы можете использовать чистый bash ... (кроме mv, то есть ..)
for file in *.htm; do mv "$file" "${file%.htm}.html"; done
и избегать неприятных базовых имен. ;)
Bash имеет обширный набор параметров расширения переменных. Используемый здесь «%» удаляет наименьший соответствующий суффикс из значения переменной. Шаблон является шаблоном глобуса, поэтому ${file%.*}
также будет работать. Оператор '%%' удаляет самый большой соответствующий суффикс и является взаимозаменяемым в приведенном выше примере, так как шаблон является фиксированным, ${file%%.*}.html
хотя превратит abhtm в a.html.
См. Раздел с подстановкой переменных на man-странице bash для более изящных приемов. В bash можно многое сделать напрямую.
В именах файлов не должно быть пробелов, символов новой строки или других пробелов, но эта версия ответа freiheit обрабатывает их. Он также использует $()
вместо обратных галочек для удобочитаемости наряду с другими преимуществами.
for file in *.htm
do
mv "$file" "$(basename "$file" .htm).html"
done
Еще лучше - для особого случая просто добавить в конец:
for file in *.htm
do
mv "$file" "${file}l"
done
rename(1)
утилита Perl, которая делает именно то, что вы хотите В этом случае:
rename 's/\.htm$/.html/' *htm
или если вы используете подкаталоги, а также
(требуется Bash 4.0 и настройки globstar: shopt -s globstar
)
rename 's/\.htm$/.html/' **/*htm
rename
поставляется с Perl, и в основном каждый Unix поставляется с Perl в наши дни.
shopt -s globstar
(по умолчанию выключен). Кроме того, в Linux и Unix есть каталоги, а не папки.
for file in *.htm; do
mv $file `basename "$file" .htm`.html
done
Попробуйте это echo
перед mv
первым разом.
Проблема с вашим оригиналом заключается в том, что " mv *.htm *.html
" *
обрабатывает s с помощью оболочки, поэтому mv
команда просто видит список всех файлов .htm и .html в текущем каталоге. Другими словами, что-то вроде " mv foo.htm bar.htm stuff.htm six.htm file.htm
". mv знает, как обрабатывать более двух аргументов, если последний является каталогом.
mv
не будет работать.
Лучший инструмент - ммв .
mmv \*.htm #1.html
Другие примеры использования (и других инструментов) в « Сводке инструментов командной строки GNU / Linux ».
#
.
Пакет util-linux-ng (в Fedora) имеет rename
команду, аналогичную команде, упомянутой в TRS-80 . Вы можете использовать это так:
rename .htm .html *.html
ren *.htm *.html
будем работать в Windows.