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