Есть ли способ пакетного переименования файлов в подкаталогах?
Например:
Переименуйте *.html в *.htm в папке, содержащей каталоги и подкаталоги.
*.html
*.htm
Командная строка Windows: (Если внутри пакетного файла, измените% x на %% x)
for /r %x in (*.html) do ren "%x" *.htm
Это также работает для переименования середины файлов
for /r %x in (website*.html) do ren "%x" site*.htm
Для Windows это лучший инструмент, который я нашел:
http://www.1 -4a.com / переименовывать /
Может делать все что угодно и имеет кухонную раковину.
Для Linux у вас есть множество языков сценариев и оболочек, которые помогут вам, как и предыдущие ответы.
find . -regex ".*html$" | while read line; do A=`basename ${line} | sed 's/html$/htm/g'`; B=`dirname ${line}`; mv ${line} "${B}/${A}"; done
В питоне
import os target_dir = "." for path, dirs, files in os.walk(target_dir): for file in files: filename, ext = os.path.splitext(file) new_file = filename + ".htm" if ext == '.html': old_filepath = os.path.join(path, file) new_filepath = os.path.join(path, new_file) os.rename(old_filepath, new_filepath)
В Bash вы можете сделать следующее:
for x in $(find . -name \*.html); do mv $x $(echo "$x" | sed 's/\.html$/.htm/') done
Если у вас есть файлы (они поставляются с Windows XP и 2003, и, как мне кажется, новее), вы можете запустить:
forfiles / S / M * .HTM / C "cmd / c ren @file * .HTML"
Я уверен, что есть более элегантный способ, но вот первое, что пришло мне в голову:
for f in $(find . -type f -name '*.html'); do mv $f $(echo "$f" | sed 's/html$/htm/') done
Total Commander , который является приложением файлового менеджера, позволяет перечислять и выбирать все файлы в его директориях и подкаталогах, а затем вы можете запускать любые операции с ними. один из них: переименование выбранных файлов.
In bash use command rename :) rename 's/\.htm$/.html/' *.htm # or find . -name '*.txt' -print0 | xargs -0 rename 's/.txt$/.xml/' #Obs1: Above I use regex \. --> literal '.' and $ --> end of line #Obs2: Use find -maxdepht 'value' for determine how recursive is #Obs3: Use -print0 to avoid 'names spaces asdfa' crash!
В Linux вы можете использовать команду rename для переименования файлов в пакетном режиме.