Como renomear arquivos e substituir caracteres?

9

Eu tenho um grupo de arquivos com : (dois pontos) dentro do nome. Preciso substituir o : por - (traço).

Existe uma maneira fácil de fazer isso em um script?

Exemplo FileName: 2013-10-11:11:52:08_055456663_045585_.txt

    
por Ducky 14.10.2013 / 21:26

5 respostas

13

Um simples 1-liner deve fazer (assume Posix sh -compatible shell):

for f in *:*; do mv -v "$f" $(echo "$f" | tr ':' '-'); done

Explicação:

  • for ... in ...; do ...; done é um circuito

  • *:* corresponde a todos os arquivos e diretórios no diretório atual diretório que tem : em seu nome

  • f é atribuído por vez a cada nome de arquivo no loop

  • mv renomeia seu primeiro argumento para o segundo; -v (verbose) pede para imprimir o que faz; esta opção é GNU-utils específica, por isso está disponível no Linux, mas não Solaris

  • $(...) executa o código em uma sub-casca e substitui a saída

  • echo imprime seu argumento para a saída padrão

  • tr lê a saída padrão e traduz os caracteres de acordo com o fornecido mapear

Se você estiver usando o bash , você pode evitar gerar um shell extra ( $() ) com subprocessos ( tr ) substituindo $(...) por ${f//:/-} .

    
por 14.10.2013 / 22:34
6

Como afirmado em outro post por mim, a ferramenta rename poderia fazer o truque para você. Você só precisa digitar %código% Isso substitui todos os dois pontos por um traço em todos os arquivos que você nomeou no final, i. e. rename s/:/-/ <files to rename>

Aqui está o link para o meu outro post

    
por 14.10.2013 / 22:48
1

Tenho certeza de que um profissional do UNIX poderia fazer isso com o bash, mas aqui está minha versão rápida e suja com o ruby.

path_to_files = "/home/username/wrongnames/"
filenames = 'ls #{path_to_files}'.split
filenames.each do |fn|
  'mv #{path_to_files + fn} #{path_to_files + fn.gsub(/:/, "-")}'
end

defina path_to_files como o caminho para seus arquivos com nome incorreto. salve o código acima em um arquivo chamado rename.rb então:

username@machinename$ ruby rename.rb
    
por 14.10.2013 / 22:42
0

usando renamer :

$ renamer --find ":" --replace "-" *
    
por 15.10.2013 / 15:12
0

Isso pode ser um exagero, mas você pode renomear qualquer caractere especial com o script no link fornecido nesta resposta:

link

    
por 31.12.2014 / 00:53