Renomeia os arquivos recursivamente, mantendo a extensão

1

Eu tenho um monte de diretórios que cada um contém um arquivo * .txt (e outros arquivos que não são * .txt).

Eu gostaria de renomear esses arquivos recursivamente a partir da linha de comando, basicamente * .txt para info.txt. Portanto, todos os arquivos * .txt devem ser renomeados para info.txt. Há sempre apenas um arquivo .txt em cada diretório.

Eu tenho olhado para várias questões aqui (e em outros lugares) que parecem semelhantes, mas elas se concentram em mudar a extensão, ou elas não funcionam recursivamente, ...

Qualquer ajuda seria muito apreciada. Plataforma: Linux ou MacOSX.

    
por Hanzaplastique 12.05.2013 / 19:32

3 respostas

3
find ~/dir -type f -name "*.txt" -not -name "info.txt" \
           -execdir mv -v {} info.txt \;

Alternativamente:

find ~/dir -type f -name "*.txt" -not -name "info.txt" \
| while read -r file; do
    mv "$file" "${file%/*}/info.txt"
done
    
por 12.05.2013 / 19:33
1

Você também pode usar o utilitário rename do Ubuntu, que aceita um Expressão Perl para modificar os nomes dos arquivos.

find . -iname "*.txt" | rename "s/[^\/]+\.txt$/info.txt/"
    
por 12.05.2013 / 21:55
0

A resposta do grawity é a mais rápida e talvez a mais "correta", mas também há algumas ferramentas baseadas na GUI que podem executar tarefas de renomeação de arquivos com uma interface fácil e suporte para expressões regulares: Krename (baseado no KDE), GPRename e pyRenamer (base do Gnome).

    
por 12.05.2013 / 21:27