Você poderia cd
para o diretório em questão e executar algo semelhante a isto:
find -L . -type f -name "*.oldextension" -print0 | while IFS= read -r -d '' FNAME; do
mv -- "$FNAME" "${FNAME%.oldextension}.newextension"
done
Ou se os arquivos não tiverem nenhuma extensão:
find -L . -type f -print0 | while IFS= read -r -d '' FNAME; do
mv -- "$FNAME" "${FNAME%}.newextension"
done
No seu caso, você teria que substituir newextension
por txt
.
Alguém mais proficiente com o bash pode ser capaz de quebrar isso melhor. Por favor, sinta-se à vontade para editar a minha resposta nesse caso.
Descrição original:
1) It will rename just the file extension (due to use of
${FNAME%.so}.dylib
). All the other solutions using${X/.so/.dylib}
are incorrect as they wrongly rename the first occurrence of.so
in the filename (e.g.x.so.so
is renamed tox.dylib.so
, or worse,./libraries/libTemp.so-1.9.3/libTemp.so
is renamed to./libraries/libTemp.dylib-1.9.3/libTemp.so
- an error).2) It will handle spaces and any other special characters in filenames (except double quotes).
3) It will not change directories or other special files.
4) It will follow symbolic links into subdirectories and links to target files and rename the target file, not the link itself (the default behaviour of find is to process the symbolic link itself, not the file pointed to by the link).
Fonte:
Bash renomear extensão recursiva - stackoverflow , respondida por aps2012 .