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
[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?
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
Algo que deve funcionar em todas as plataformas:
for i in *.bak
do
mv $i 'echo $i | sed 's/\.bak$//''
done
Como o promp de resposta do RomanPerekhrest aqui , acho que este comando funciona para mim.
rename .bak '' *.bak
#!/bin/bash
for val in \'ls *.bat'
do
mv $val 'echo $val | cut -f1 -d'.''
done