Рекурсивно добавлять расширение файла ко всем файлам

У меня есть несколько каталогов и подкаталогов, содержащих файлы без расширения файла. Я хочу добавить .jpg ко всем файлам, содержащимся в этих каталогах. Я видел сценарии bash для изменения расширения файла, но не для его добавления. Он также должен быть рекурсивным, может ли кто-нибудь помочь?

Ответ 1

Альтернативная команда без явного цикла (man find):

find . -type f -exec mv '{}' '{}'.jpg \;

Объяснение: это рекурсивно находит все файлы (-type f), начиная с текущего каталога (.) и применяет команду перемещения (mv) каждому из них. Также обратите внимание на кавычки вокруг {}, чтобы имена файлов с пробелами (и даже с символами новой строки...) были правильно обработаны.

Ответ 2

это найдет файлы без расширения и добавит ваш .jpg

find /path -type f -not -name "*.*" -exec mv "{}" "{}".jpg \;

Ответ 3

Это немного поздно, но я подумал, что добавлю, что лучшее решение (хотя, возможно, менее читаемое), чем те, которые до сих пор могут быть:

find /path -type f -not -name "*.*" -print0 | xargs -0 rename 's/(.)$/$1.jpg/'

Использование шаблона find | xargs обычно приводит к более эффективному выполнению, так как вам не нужно разветвлять новый процесс для каждого файла.

Обратите внимание, что для этого требуется версия переименования, найденная в дистрибутивах с расширением Debian (aka prename), а не традиционное переименование. Это всего лишь крошечный perl script, поэтому было бы достаточно просто использовать команду выше в любой системе.

Ответ 4

как это,

for f in $(find . -type f); do mv $f ${f}.jpg; done

Я не ожидаю, что у вас есть имена разделенных пробелами,
Если вы это сделаете, имена нужно будет немного обработать.

Если вы хотите выполнить команду из другого каталога,
вы можете заменить find . на find /target/directory.

Ответ 5

rename

не уверен, что он может переименовывать файлы без расширений (сейчас я на Windows 7)

Ответ 6

Для переименования всех файлов без расширения в Windows basic вы можете сделать ren * *.jpg Поскольку файл не является расширением, просто используйте *, или если вы хотите изменить png на jpg используйте ren *.png *.jpg