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