2008-10-29 4 views
34

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

Пример:

Rename * .html на * .htm в папке, которая имеет каталоги и подкаталоги.

+0

На каком языке? – 2008-10-29 05:01:51

+0

Пакет, вы имеете в виду «много за раз» или в формате .bat/.cmd/.sh? Первый - это не вопрос программирования, а для Windows для этого есть множество бесплатных утилит. Последние нуждаются в большей точности, по крайней мере, какой ОС вы нацеливаете. – PhiLho 2008-10-29 06:27:04

ответ

67

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

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

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

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

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

for x in $(find . -name \*.html); do 
    mv $x $(echo "$x" | sed 's/\.html$/.htm/') 
done 
2

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

for f in $(find . -type f -name '*.html'); do 
    mv $f $(echo "$f" | sed 's/html$/htm/') 
done 
7

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

http://www.1-4a.com/rename/

это может сделать что-нибудь И есть кухонная раковина с ним.

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

+0

Perl-скрипт, который я опубликовал, работает в Windows (протестировал его в Windows). – 2008-10-29 05:42:54

+1

@BKB Большинство оконных установок не поставляются с perl. и кажется абсурдным устанавливать perl только для переименования каталогов. это решение с низким барьером – moogs 2008-10-29 07:37:33

+0

Так что установка приложения, которое может только переименовывать файлы, менее абсурдно, чем установка чего-то столь же мощного, как perl? – RJFalconer 2009-10-11 17:45:10

6
find . -regex ".*html$" | while read line; 
do 
    A=`basename ${line} | sed 's/html$/htm/g'`; 
    B=`dirname ${line}`; 
    mv ${line} "${B}/${A}"; 
done 
5

В python

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) 
1

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

0

AWK на Linux. Для первого каталога это ваш ответ ... Экстраполируйте путем рекурсивного вызова awk на dir_path, возможно, написав еще один awk, который пишет этот точный awk ниже ... и так далее.

ls dir_path/. | awk -F"." '{print "mv file_name/"$0" dir_path/"$1".new_extension"}' |csh 
0

для Windows, я сделал convenient litte VBScript solution с регулярными выражениями на основе переименования и Drag & поддержку падения. Попробуйте, если хотите, поместите его в файл vbs и поместите в него папку в Проводнике.

1
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! 
0

В Windows The Rename делает очень хорошую работу в этом. Freeware, но не с открытым исходным кодом.

2

Если у вас есть Forfiles (поставляется с Windows XP и 2003 и более новые вещи, я думаю) вы можете запустить:

Forfiles/S/M * .HTM/C «CMD/с жэнь @file *. HTML»

1

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

0

В Windows вы можете узнать с открытым исходным кодом простых C# насыпного файла Renamer применения в https://filerenamer.codeplex.com работ с простым Ехчел. Дайте файл Excel с двумя столбцами источник и назначение для этого приложения, и все будет готово.

0

В Unix, вы можете использовать rnm:

rnm -rs '/\.html$/.htm/' -fo -dp -1 * 

Или

rnm -ns '/n/.htm' -ss '\.html$' -fo -dp -1 * 

Объяснение:

  1. -ns: имя строки (новое название). /n/ - это правило строки имени, которое расширяется до имени файла без расширения.
  2. -ss: поиск строка (regex). Ищет файлы с совпадением.
  3. -rs: заменить строку вида /search_regex/replace_part/modifier
  4. -fo: файл только в режиме
  5. -dp: глубина каталога (-1 означает неограниченную).
Смежные вопросы