Добавить расширение файла в файлы, которые не имеют расширения

У меня есть сотни файлов в разных подкаталогах. Некоторые из них имеют правильное расширение файла, но некоторые из них этого не делают. Я хочу переименовать все файлы, у которых нет расширения файла, и добавьте расширение .mp4 к их имени файла. Остальные файлы должны быть оставлены нетронутыми. Как я могу автоматизировать эту операцию переименования с помощью Bash? Или мне нужен настоящий скриптовый язык, например Perl или Python?

Что-то вроде этого:

 find . -type f ! -name "*.*" -exec mv {} {}.mp4 \; 

Попробуй это:

 find -type f -not -name '*.mp4' -exec rename -n 's/$/.mp4/' {} + 

Это проверяет все файлы в текущем каталоге и его подпапках, которые не заканчиваются на .mp4 и переименовывает их для добавления расширения

Предполагается команда rename основе perl , опция -n – показать, как файлы будут переименованы. Как только вы с этим справитесь, удалите эту опцию и снова запустите команду

Пример:

 $ find -type f ./rand_numbers.txt ./tst ./abc/123 ./abc/zyx.txt $ find -type f -not -name '*.mp4' -exec rename -n 's/$/.mp4/' {} + rename(./rand_numbers.txt, ./rand_numbers.txt.mp4) rename(./tst, ./tst.mp4) rename(./abc/123, ./abc/123.mp4) rename(./abc/zyx.txt, ./abc/zyx.txt.mp4) 

Если вы определяете файл без расширения для обозначения имен файлов без них . от их имени, используйте:

 $ find -type f -not -name '*.*' -exec rename -n 's/$/.mp4/' {} + rename(./tst, ./tst.mp4) rename(./abc/123, ./abc/123.mp4)