Добавить суффиксы всем файлам в директории

У меня есть набор директорий с файлами в корневой директории test. Как рекурсивно добавить всем файлам (НЕ директориям) в test суффиксы .txt?

Например, были директории test, test/a, test/b и файлы test/x, test/b/y. Как сделать из этого test/x.txt, test/b/y.txt, при этом сохранив test/a нетронутым?

Интересует bash-команда или python-скрипт.


Ответы (2 шт):

Автор решения: suffix

Сделал вот так:

find test -type f -exec bash -c 'mv -i "$1" "$1.txt"' _ {} \;

На >10 Gb директории с сотнями тысяч файлов и директорий не упало, так что должно быть нормально.

→ Ссылка
Автор решения: Ainar-G

Немного улучшенная версия:

$ find test -type f ! -name '*.txt' -exec mv {} {}.txt ';'

Так команда не будет переименовывать файлы, которые уже с расширением, а также убран лишний вызов интерпретатора. (Правда, по поводу второго стандарт POSIX говорит, что ответ на вопрос, заменяется ли {} на имя файла в конструкциях типа {}.txt, является «implementation defined», но во всех популярных имплементациях это поддерживается.)

→ Ссылка