Как переименовать файлы в подкаталогах?
-
05-07-2019 - |
Вопрос
Есть ли способ пакетного переименования файлов в подкаталогах?
Например:
Переименовать *.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
Другие советы
Для окон это лучший инструмент, который я нашел:
Он может делать все что угодно и имеет кухонную раковину.
Для Linux у вас есть множество языков сценариев и оболочек, которые помогут вам, как и предыдущие ответы.
find . -regex ".*html<*>quot; | 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
Я уверен, что есть более элегантный способ, но вот первое, что пришло мне в голову:
for f in $(find . -type f -name '*.html'); do
mv $f $(echo "$f" | sed 's/html$/htm/')
done
Если у вас есть файлы (они поставляются с Windows XP и 2003, и, как мне кажется, новее), вы можете запустить:
forfiles / S / M * .HTM / C "cmd / c ren @file * .HTML"
В Linux вы можете использовать команду rename для переименования файлов в партии. р>
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!
Total Commander , который представляет собой приложение для работы с файловыми менеджерами. выбрать все файлы в своем каталоге субдиректории, тогда вы можете запускать любые операции с ними. один из них: многократное переименование выбранных файлов.
AWK в Linux. Для первого каталога это ваш ответ ... Экстраполируйте, рекурсивно вызывая awk в dir_path, возможно, написав другой awk, который пишет этот точный awk ниже ... и так далее.
ls dir_path/. | awk -F"." '{print "mv file_name/"<*>" dir_path/"$1".new_extension"}' |csh
Для Windows я создал удобное решение для VBScript для litte с переименованием на основе регулярных выражений и Drag & amp; Поддержка падения. Попробуйте, если хотите, - поместите его в VBS-файл и поместите в него папку в Проводнике.
В Windows Переименование выполняет довольно хорошая работа в этом. Бесплатная, но не с открытым исходным кодом.
В Windows вы можете найти простое приложение C # переименование файлов с открытым исходным кодом в https : //filerenamer.codeplex.com работает с простым файлом Excel . Дайте приложению файл Excel с двумя столбцами источника и назначения, и все готово.
В Unix вы можете использовать рнм:
rnm -rs '/\.html$/.htm/' -fo -dp -1 *
Или
rnm -ns '/n/.htm' -ss '\.html$' -fo -dp -1 *
Объяснение:
-ns
:строка имени (новое имя)./n/
— это правило строки имени, которое расширяется до имени файла без расширения.-ss
:строка поиска (регулярное выражение).Ищет файлы с совпадением.-rs
:заменить строку формы/search_regex/replace_part/modifier
-fo
:режим только файла-dp
:глубина каталога (-1 означает неограниченную).