У меня есть несколько каталогов и подкаталогов, содержащих файлы без расширения файла. Я хочу добавить .jpg
ко всем файлам, содержащимся в этих каталогах. Я видел сценарии bash для изменения расширения файла, но не для его добавления. Он также должен быть рекурсивным, может ли кто-нибудь помочь?
Рекурсивно добавлять расширение файла ко всем файлам
Ответ 1
Альтернативная команда без явного цикла (man find
):
find . -type f -exec mv '{}' '{}'.jpg \;
Объяснение: это рекурсивно находит все файлы (-type f
), начиная с текущего каталога (.
) и применяет команду перемещения (mv
) каждому из них. Также обратите внимание на кавычки вокруг {}
, чтобы имена файлов с пробелами (и даже с символами новой строки...) были правильно обработаны.
Ответ 2
это найдет файлы без расширения и добавит ваш .jpg
find /path -type f -not -name "*.*" -exec mv "{}" "{}".jpg \;
Ответ 3
Это немного поздно, но я подумал, что добавлю, что лучшее решение (хотя, возможно, менее читаемое), чем те, которые до сих пор могут быть:
find /path -type f -not -name "*.*" -print0 | xargs -0 rename 's/(.)$/$1.jpg/'
Использование шаблона find | xargs
обычно приводит к более эффективному выполнению, так как вам не нужно разветвлять новый процесс для каждого файла.
Обратите внимание, что для этого требуется версия переименования, найденная в дистрибутивах с расширением Debian (aka prename), а не традиционное переименование. Это всего лишь крошечный perl script, поэтому было бы достаточно просто использовать команду выше в любой системе.
Ответ 4
как это,
for f in $(find . -type f); do mv $f ${f}.jpg; done
Я не ожидаю, что у вас есть имена разделенных пробелами,
Если вы это сделаете, имена нужно будет немного обработать.
Если вы хотите выполнить команду из другого каталога,
вы можете заменить find .
на find /target/directory
.
Ответ 5
rename
не уверен, что он может переименовывать файлы без расширений (сейчас я на Windows 7)
Ответ 6
Для переименования всех файлов без расширения в Windows basic вы можете сделать ren * *.jpg
Поскольку файл не является расширением, просто используйте *, или если вы хотите изменить png на jpg
используйте ren *.png *.jpg