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

StackOverflow https://stackoverflow.com/questions/1108527

Вопрос

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

Это было полезно?

Решение

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

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

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

Другие советы

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

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

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

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

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

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

вот так,

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

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

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

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

rename

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top