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


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

6 87

6 ответов:

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

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

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

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

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

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

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

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

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

как это

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

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

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

rename

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

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