rename
немного опасно, так как в соответствии с его страницей руководства :
переименование переименует указанные файлы, заменив первое вхождение...
Он с радостью сделает что-то не так с именами файлов, такими как c.txt.parser.y
.
Вот решение с использованием find
и bash
:
find -type f -name '*.txt' | while read f; do mv "$f" "${f%.txt}"; done
Имейте в виду, что это сломается, если имя файла содержит новую строку (редко, но не невозможно).
Если у вас есть GNU find, это более надежное решение:
find -type f -name '*.txt' -print0 | while read -d $'\0' f; do mv "$f" "${f%.txt}"; done