Pergunta

Existe alguma maneira de lote renomear arquivos em sub-diretórios?

Por exemplo:

Rename *.html para *.htm em uma pasta que tem diretórios e subdiretórios.

Foi útil?

Solução

comando do Windows prompt: (Se dentro de um arquivo de lote, mudança% x para %% x)

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

Isso também funciona para mudar o nome do meio dos arquivos

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

Outras dicas

Para Windows, esta é a melhor ferramenta que eu encontrei:

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

Ele pode fazer qualquer coisa e tem a pia da cozinha com ela.

Para Linux, você tem uma infinidade de linguagens de script e conchas para ajudá-lo, como as respostas anteriores.

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

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

Em Bash, você pode fazer o seguinte:

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

Eu tenho certeza que há uma maneira mais elegante, mas aqui é a primeira coisa que veio na minha cabeça:

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

Se você tem forfiles (que vem com o Windows XP e 2003 e coisas novas eu acho) você pode executar:

forfiles / S / M * .HTM / C "CMD / c s @file * .HTML"

No Linux, você pode usar o comando ' renomeação ' para renomear arquivos em batch.

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 que é um aplicativo gerenciador de arquivos, permite que você lista e selecionar todos arquivos dentro do seu dir & sub-diretórios, então você pode executar qualquer uma das operações comandante total sobre eles. sendo um deles:. multi-renomear os arquivos selecionados

AWK em Linux. Pela primeira diretório esta é a sua resposta ... extrapolar por recursivamente chamar awk em dir_path talvez escrevendo outro awk que escreve esta awk exata abaixo ... e assim por diante.

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

Para o Windows, eu fiz um conveniente litte VBScript solução com renomeação baseado em regex e Drag & Drop Apoio, suporte. Experimentá-lo se você gosta -. Colocá-lo em um arquivo VBS e soltar sua pasta nele no Explorer

No Windows, A Rename faz um bom trabalho bastante para isso. Freeware, mas não open source.

No Windows, você pode descobrir opensource simples C # arquivo em massa renamer aplicação em https : //filerenamer.codeplex.com trabalha com uma simples arquivo excel . Dê um arquivo do Excel com fonte de duas colunas e um destino para esta aplicação e ele é feito.

No Unix, você pode usar RNM :

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

ou

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

Explicação:

  1. -ns: string nome (novo nome). /n/ é uma regra cadeia de nome que se expande para o nome do arquivo sem a extensão.
  2. -ss: string de pesquisa (regex). Procura por arquivos com jogo.
  3. -rs: substituir string no formato /search_regex/replace_part/modifier
  4. -fo: arquivo somente modo
  5. -dp:. profundidade de diretório (-1 significa ilimitado)
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top