Renomeando arquivos com espaços, mantendo os números intactos

1

Estou procurando renomear muitos arquivos que contenham espaços no nome do arquivo, mantendo a sequência de números intacta. Os números não são seqüenciais e a string antes e depois dos números não é a mesma para todos os arquivos. Eu quero que a string que precede os números seja a mesma para todos os arquivos.

Por exemplo:

100 foo_1.ext
200 foo_2.ext
201 foo_3.ext

renomeado para

100.ext
200.ext
201.ext
    
por Andrew 06.09.2017 / 07:03

3 respostas

3

Você pode tentar:

for a in *.ext; do mv "$a" "${a/ */}.ext"; done

Explicação :

for a in *.ext - obtém todos os arquivos com a extensão .ext no diretório atual;

a/ */ - substitui a substring por nada ($ {string / substring / replacement}). Essa construção obtém todos os símbolos após o espaço (inclusive) e os exclui.

.

Ou se você tiver arquivos com extensões diferentes e precisar processar todos os arquivos no diretório, tente:

for a in *; do mv "$a" "${a/ *\./\.}"; done

O equivalente com o comando renomear Perl é:

prename 's/ .*\./\./' *

Exemplo : arquivos

100 foo_1.ext
200 foo_1.ext
201 foo_3.ext
3401 txt_3.txt

será renomeado para

100.ext
200.ext
201.ext
3401.txt

Arquivos sem espaços no nome do arquivo não serão processados.

    
por 06.09.2017 / 08:52
1

Use prename para isso:

prename 's/\D*(\d*).*/$1.ext/' *.ext

Para todos os arquivos fornecidos, isso substitui a expressão regular estendida \D*\d*.* (um número de não dígitos seguido por um número de dígitos e o restante do nome) pela parte entre () , que são os dígitos e a extensão.

Depois que a pergunta foi editada, parece que os nomes dos arquivos começam com o número, seguido pelo espaço. Isso torna ainda mais simples:

prename 's/ .*/.ext/' *.ext
    
por 06.09.2017 / 07:38
0

A renomeação do Perl (não a do Linux) pode ser usada:

prename  -n 's/(\d*)\s*foo_\d*/$1/g' /path/to/folder/*.ext

ou

prename  -n 's/(\d*)\s*.*_\d*/$1/g' /path/to/folder/*.ext

Exemplos de nomes de arquivos:

100 foo_2.ext  
101 foo_1.ext   
200 foo_234.ext   
302 foo_2.ext

Resultados:

100.ext
101.ext
200.ext
302.ext

Informação:

  1. (\d)\sfoo_\d ou (\d)\s.*_\d : corresponde ao seu nome de arquivo
  2. (\d) : retorna os dígitos da frente
  3. $1 : valor (es) de retorno variável em 2
  4. -n : usado para ver o resultado do comando prename , remover para fazer alterações

Veja: man prename

    
por 06.09.2017 / 08:18

Tags