Как переименовать файлы в подкаталогах? - PullRequest
39 голосов
/ 29 октября 2008

Есть ли способ пакетного переименования файлов в подкаталогах?

Например:

Переименуйте *.html в *.htm в папке, содержащей каталоги и подкаталоги.

Ответы [ 15 ]

74 голосов
/ 29 октября 2008

Командная строка Windows: (Если внутри пакетного файла, измените% x на %% x)

for /r %x in (*.html) do ren "%x" *.htm

Это также работает для переименования середины файлов

for /r %x in (website*.html) do ren "%x" site*.htm
8 голосов
/ 29 октября 2008

Для Windows это лучший инструмент, который я нашел:

http://www.1 -4a.com / переименовывать /

Может делать все что угодно и имеет кухонную раковину.

Для Linux у вас есть множество языков сценариев и оболочек, которые помогут вам, как и предыдущие ответы.

6 голосов
/ 29 октября 2008
find . -regex ".*html$" | while read line;
 do 
    A=`basename ${line} | sed 's/html$/htm/g'`;
    B=`dirname ${line}`;
    mv ${line} "${B}/${A}";
 done
5 голосов
/ 29 октября 2008

В питоне

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)
3 голосов
/ 29 октября 2008

В Bash вы можете сделать следующее:

for x in $(find . -name \*.html); do
  mv $x $(echo "$x" | sed 's/\.html$/.htm/')
done
2 голосов
/ 23 ноября 2009

Если у вас есть файлы (они поставляются с Windows XP и 2003, и, как мне кажется, новее), вы можете запустить:

forfiles / S / M * .HTM / C "cmd / c ren @file * .HTML"

2 голосов
/ 29 октября 2008

Я уверен, что есть более элегантный способ, но вот первое, что пришло мне в голову:

for f in $(find . -type f -name '*.html'); do 
    mv $f $(echo "$f" | sed 's/html$/htm/')
done
1 голос
/ 08 декабря 2011

Total Commander , который является приложением файлового менеджера, позволяет перечислять и выбирать все файлы в его директориях и подкаталогах, а затем вы можете запускать любые операции с ними. один из них: переименование выбранных файлов.

1 голос
/ 29 октября 2008
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!
1 голос
/ 29 октября 2008

В Linux вы можете использовать команду rename для переименования файлов в пакетном режиме.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...