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
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.
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/"
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).
Tags command-line bash rename linux macos