Como soltar algumas cadeias em cada nome de arquivo

1

[root@localhost ~]# ls *.bak

test2.bak test3.bak test9.bak test.bak test.txt.bak

Como eliminar todos os .bak em todos os arquivos? Esta é a minha tentativa atual

ls *.bak|xargs -t -i mv {}.bak {}

Mas não funciona para mim. Existe alguma solução aqui?

    
por yode 23.06.2017 / 15:40

5 respostas

1

Use o comando rename :

rename 's/\.bak$//' *.bak
  • Expressão 's/\.bak$//' - perl para corresponder a todos os nomes de arquivos terminados em .bak e remover a extensão
por 23.06.2017 / 15:44
2

Um loop deve fazer (em um shell parecido com POSIX):

for f in *.bak; do 
    mv -- "$f" "${f%.*}"
done

E como uma linha:

for f in *.bak; do mv -- "$f" "${f%.*}"; done
    
por 23.06.2017 / 16:03
0

Algo que deve funcionar em todas as plataformas:

for i in *.bak
do
  mv $i 'echo $i | sed 's/\.bak$//''
done
    
por 23.06.2017 / 15:50
0

Como o promp de resposta do RomanPerekhrest aqui , acho que este comando funciona para mim.

rename .bak '' *.bak
    
por 23.06.2017 / 16:31
-1
#!/bin/bash
for val in \'ls *.bat'
do
    mv $val 'echo $val | cut -f1 -d'.''
done
    
por 23.06.2017 / 16:16