Renomeia todos os arquivos em uma pasta de forma que remova o texto entre dois mesmos caracteres

2

Eu tenho um grande número de arquivos em pastas cujos nomes são os seguintes:

abc.test.txt
edf.main.txt
num2.tb.doc
file3.map.csv
file4.test.csv

Eu gostaria que esses arquivos fossem renomeados para que o texto entre os arquivos . fosse removido e os arquivos acima fossem renomeados da seguinte forma:

abc.txt
edf.txt
num2.doc
file3.csv
file4.csv

Isso é possível?

Encontrei algo semelhante, mas não satisfaz o que preciso.

como posso renomear múltiplos arquivos removendo um caractere ou string?

    
por aippili 22.04.2016 / 19:04

3 respostas

2

Em zsh, use zmv . Execute autoload -U zmv ou coloque isso no seu '' /.zshrc ', então

zmv '(*).*(.*)' '$1$2'

ou

zmv -w '*.*.*' '$1.$3'

Como alternativa, se você tiver o comando prename (script Perl que aplica uma expressão a cada nome de arquivo):

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

Com apenas ferramentas disponíveis em todos os sistemas POSIX, use um loop a> e expansão de parâmetros para extrair as partes do nome.

for x in *.*.*; do
  mv -- "$x" "${x%.*.*}.${x##*.}"
done
    
por 23.04.2016 / 02:36
1

Usando o utilitário renomear perl:

prename 's/\.[^.]*\././' *

prename permite que você renomeie arquivos usando expressões perl.

Em alguns sistemas, o mesmo programa é chamado rename em vez de (ou bem) prename . Existem outros programas chamados rename que funcionam de forma muito diferente - verifique a página rename man no seu sistema para ter certeza.

por exemplo. por padrão, rename nos sistemas Debian é um link simbólico para prename (através do sistema /etc/alternatives ). Outras distros podem ser diferentes.

O Debian também tem um pacote chamado rename , que contém uma versão aprimorada do prename chamado file-rename . É uma versão mais recente e atualizada do mesmo script. Ele tem uma prioridade mais alta em alternativas, portanto, a instalação do pacote alterará o link simbólico rename para file-rename .

    
por 23.04.2016 / 03:53
-1

Isso deve resolver isso

for file in $(find ./)
do
  newname=$(echo ${file} | sed -e 's/\.\(.*\)\././')
  mv ${file} ${newname}
done
    
por 22.04.2016 / 19:56

Tags