рекурсивно добавить расширение файла ко всем файлам - PullRequest
98 голосов
/ 10 июля 2009

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

Ответы [ 6 ]

212 голосов
/ 10 июля 2009

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

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

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

57 голосов
/ 10 июля 2009

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

find /path -type f -not -name "*.*" -exec mv "{}" "{}".jpg \;
9 голосов
/ 14 июля 2009

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

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

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

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

4 голосов
/ 10 июля 2009

вот так,

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

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

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

1 голос
/ 08 ноября 2015

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

0 голосов
/ 10 июля 2009

rename

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...