Renomeie arquivos para remover texto após ponto

2

Eu tenho estes arquivos:

JE.TR21201610011612514806.47250728
JE.TR21201610011613514807.91514463
JE.TR21201610011614514808.4107721050
JE.TR21201610011626514818.3578493139
JE.TR21201610011627514819.1032212591
JE.TR21201610011628514820.3663420052
JE.TR21201610011629514821.3388683091

Como posso renomeá-los para isso?

JE.TR21201610011612514806
JE.TR21201610011613514807
JE.TR21201610011614514808
JE.TR21201610011624514817
JE.TR21201610011626514818
JE.TR21201610011627514819
JE.TR21201610011628514820
JE.TR21201610011629514821
    
por jeanBrooklyn 11.07.2017 / 20:03

4 respostas

8

Qualquer um

$ rename -n 's/\.\d*$//' JE.*
rename(JE.TR21201610011612514806.47250728, JE.TR21201610011612514806)
rename(JE.TR21201610011613514807.91514463, JE.TR21201610011613514807)
rename(JE.TR21201610011614514808.4107721050, JE.TR21201610011614514808)
rename(JE.TR21201610011626514818.3578493139, JE.TR21201610011626514818)
rename(JE.TR21201610011627514819.1032212591, JE.TR21201610011627514819)
rename(JE.TR21201610011628514820.3663420052, JE.TR21201610011628514820)
rename(JE.TR21201610011629514821.3388683091, JE.TR21201610011629514821)

ou

$ prename -n 's/\.\d*$//' JE.*
JE.TR21201610011612514806.47250728 renamed as JE.TR21201610011612514806
JE.TR21201610011613514807.91514463 renamed as JE.TR21201610011613514807
JE.TR21201610011614514808.4107721050 renamed as JE.TR21201610011614514808
JE.TR21201610011626514818.3578493139 renamed as JE.TR21201610011626514818
JE.TR21201610011627514819.1032212591 renamed as JE.TR21201610011627514819
JE.TR21201610011628514820.3663420052 renamed as JE.TR21201610011628514820
JE.TR21201610011629514821.3388683091 renamed as JE.TR21201610011629514821

ou

$ mmv -n "JE.*.*" JE.#1
JE.TR21201610011612514806.47250728 -> JE.TR21201610011612514806
JE.TR21201610011613514807.91514463 -> JE.TR21201610011613514807
JE.TR21201610011614514808.4107721050 -> JE.TR21201610011614514808
JE.TR21201610011626514818.3578493139 -> JE.TR21201610011626514818
JE.TR21201610011627514819.1032212591 -> JE.TR21201610011627514819
JE.TR21201610011628514820.3663420052 -> JE.TR21201610011628514820
JE.TR21201610011629514821.3388683091 -> JE.TR21201610011629514821

(remova o -n para concluir a ação)

ou

$ for f in JE.*; do echo mv "$f" "${f%.*([0-9])}"; done
mv JE.TR21201610011612514806.47250728 JE.TR21201610011612514806
mv JE.TR21201610011613514807.91514463 JE.TR21201610011613514807
mv JE.TR21201610011614514808.4107721050 JE.TR21201610011614514808
mv JE.TR21201610011626514818.3578493139 JE.TR21201610011626514818
mv JE.TR21201610011627514819.1032212591 JE.TR21201610011627514819
mv JE.TR21201610011628514820.3663420052 JE.TR21201610011628514820
mv JE.TR21201610011629514821.3388683091 JE.TR21201610011629514821

(remova o echo para concluir a ação).

    
por steeldriver 11.07.2017 / 20:17
1

Aqui está uma maneira rápida de fazer isso em Python:

$ tree
.
├── JE.TR21201610011612514806.47250728
├── JE.TR21201610011613514807.91514463
├── JE.TR21201610011614514808.4107721050
├── JE.TR21201610011626514818.3578493139
├── JE.TR21201610011627514819.1032212591
├── JE.TR21201610011628514820.3663420052
└── JE.TR21201610011629514821.3388683091

0 directories, 7 files
$ python -c 'import os,sys; map(lambda x: os.rename(x,x[0:x.rfind(".")]) , sys.argv[1:])' JE.*  
$ tree
.
├── JE.TR21201610011612514806
├── JE.TR21201610011613514807
├── JE.TR21201610011614514808
├── JE.TR21201610011626514818
├── JE.TR21201610011627514819
├── JE.TR21201610011628514820
└── JE.TR21201610011629514821

Há alguns pontos importantes sobre como isso funciona:

  • nós passamos todos os nomes de arquivos via JE.* glob, e então nos referimos a eles via sys.argv[1:] .
  • map() nos permite executar a função lambda em qualquer que seja a fatia da lista sys.argv[1:] .
  • a função lambda que temos aqui faz uso da função os.rename(old,new) para realmente renomear cada item na lista
  • x[0:x.rfind(".")] é na verdade uma fatia (ou substring). Usando a função .rfind() , encontramos o índice da primeira ocorrência de . , começando do lado direito da string (ou seja, do final). Assim, a fatia da lista pode ser lida como x[0:<index of the last dot>]
por Sergiy Kolodyazhnyy 13.07.2017 / 09:30
0

Uma maneira simples de renomear arquivos e pastas é com o comando mv (abreviado de "move"). Sua finalidade principal é mover arquivos e pastas, mas também pode renomeá-los, pois o ato de renomear um arquivo é interpretado pelo sistema de arquivos como sendo movido de um nome para outro.

A sintaxe é:

mv (option) file1.ext file2.ext

onde file1.ext é o nome "antigo" do arquivo e file2.ext o novo nome.

    
por Arpit Gaurav 11.07.2017 / 20:08
0

Um comando que eu uso com bastante frequência é: vidir . vi ou vim é para arquivos e vidir é para diretórios.

Se você executar o vidir e obter o comando não encontrado , será necessário instalar o pacote moreutils :

sudo apt-get install moreutils

De volta ao seu caso:

  1. Ir para o diretório em que os arquivos são: cd path-to-files
  2. Digite o comando: vidir e pressione ENTER
  3. Agora você verá toda a lista com todos os arquivos, digite este comando: :1,$ s/\.\d*$//g (ele procura por um ponto seguido por dígitos e remove tudo até o final)
  4. Para sair e salvar o tipo: :x

Veja também link

    
por koni_raid 13.07.2017 / 10:58