/ / Alterar recursivamente as extensões de arquivo no Bash [duplicado] - linux, bash, shell, sh

Mudar recursivamente as extensões de arquivo no Bash [duplicado] - linux, bash, shell, sh

Quero fazer uma iteração recursiva por meio de um diretório e alterar a extensão de todos os arquivos de uma certa extensão, digamos .t1 para .t2. Qual é o comando bash para fazer isso?

Respostas:

115 para resposta № 1

Se você tiver renomeado disponível, use:

find . -name "*.t1" -exec rename "s/.t1$/.t2/" "{}" ;

Se a renomeação não estiver disponível, use:

find . -name "*.t1" -exec bash -c "mv "$1" "${1%.t1}".t2" - "{}" ;

7 para resposta № 2

Se sua versão de bash suporta o globstar opção (versão 4 ou posterior):

shopt -s globstar
for f in **/*.t1; do
mv "$f" "${f%.t1}.t2"
done

5 para resposta № 3

Ou você pode simplesmente instalar o mmv comando e fazer:

mmv "*.t1" "#1.t2"

Aqui #1 é a primeira parte glob, ou seja, a * dentro *.t1 .

Ou em coisas puras, uma maneira simples seria:

for f in *.t1; do
mv "$f" "${i%.t1}.t2"
done

(por exemplo: for pode listar arquivos sem a ajuda de um comando externo, como ls ou find)

HTH


2 para resposta № 4

Eu faria assim no bash:

for i in $(ls *.t1);
do
mv "$i" "${i%.t1}.t2"
done

EDITAR: meu erro: não é recursivo, aqui está o meu caminho para alterar o nome do arquivo recursivo:

for i in $(find `pwd` -name "*.t1");
do
mv "$i" "${i%.t1}.t2"
done