Добавить суффиксы всем файлам в директории
У меня есть набор директорий с файлами в корневой директории 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 шт):
Сделал вот так:
find test -type f -exec bash -c 'mv -i "$1" "$1.txt"' _ {} \;
На >10 Gb директории с сотнями тысяч файлов и директорий не упало, так что должно быть нормально.
Немного улучшенная версия:
$ find test -type f ! -name '*.txt' -exec mv {} {}.txt ';'
Так команда не будет переименовывать файлы, которые уже
с расширением, а также убран лишний вызов
интерпретатора. (Правда, по поводу второго стандарт POSIX
говорит, что ответ на вопрос, заменяется ли {}
на имя файла в конструкциях типа {}.txt, является
«implementation defined», но во всех популярных имплементациях
это поддерживается.)