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