Якщо у мене є група файлів із розширенням .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.
Дивіться розділ змінної підстанції на сторінці bash для отримання більш акуратних прийомів. Є багато, що можна зробити безпосередньо в басі.
У файлах файлів не повинно бути пробілів, нових рядків чи інших пробілів, але ця версія відповіді фрейхейту обробляє їх. Він також використовує $()
замість підказок для читабельності разом з іншими перевагами.
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.