Дайте всем файлам расширение .jpg

8

У меня есть каталог, и некоторые расширения файлов находятся в верхнем регистре (.JPG) вместо строчных.

Я хочу убедиться, что каждый файл имеет расширение .jpg. Как бы я сделал это из командной строки?

Марк Флинт
источник
Жаль, что в Linux нет AppleScript.
gadgetmo
2
Это так здорово, что в Linux нет AppleScript.
математическое

Ответы:

15

Использование расширения параметров оболочки :

for f in *.JPG; do
    mv "${f}" "${f%%.JPG}.jpg"
done

Эти "символы будут заботиться о именах файлов , содержащих пробелы, так как фотографии часто.

Johnsyweb
источник
5
+1 Это решение работает, даже если у вас есть пробелы в имени файла, но вы имеете в виду «$ f» вместо «f».
Адам Зальцман
Расширение параметров оболочки немного загадочно, вместо этого можно использовать базовое имя: для f в * .JPG; do mv "$ f" "` basename $ f .JPG`.jpg "; сделано
математика
@math: я предпочитаю свою версию, так как она работает с именами файлов, содержащими пробелы, и будет работать с ними /path/to/*.JPG. Вы можете представить свой ответ, конечно :)
Johnsyweb
Конечно, basename удалит ведущие каталоги, но будет работать с пробелами внутри имен файлов. (Я не думаю, что это стоит ответа;) поэтому я разместил его как комментарий)
математика,
10

Если вы можете использовать внешние инструменты (не только bash), проверьте renameкоманду!

rename .JPG .jpg *

Это renameчасть util-linux.

uzsolt
источник
переименовать это ... проблематично. Существует версия переименования, perlкоторая принимает разные аргументы, чтобы сделать то же самое.
cha0site
Не могли бы вы объяснить немного больше? Какая версия кстати?
математическое
3

Если у вас есть пробелы в именах файлов:

for f in *.JPG; do [[ -f "${f}" ]] && mv "${f}" "${f/%JPG/jpg}"; done
cha0site
источник
2

Я бы посоветовал взглянуть на mmvкоманду. Он подходит именно для такого рода задач. В вашем сценарии это будет:

#> mmv "*.JPG" "#1.jpg"

Страница man полна примеров, так что вам не нужно время, чтобы привыкнуть к ней.

В системах Debian его можно установить с помощью:

#> aptitude install mmv
Алессандро Дотти Контра
источник
0

если у вас нет пробелов в именах файлов:

for f in *.JPG; do mv $f `echo $f | sed 's/JPG$/jpg/'`; done
Каролий хорват
источник
1
Было бы достаточно легко сделать это для файлов с пробелами в имени: просто добавьте двойные кавычки вокруг обоих аргументов mv.
Адам Зальцман
У меня нет пробелов. Что я добавлю, чтобы это произошло в каталоге CURRENT. В настоящий момент я получаю сообщение об ошибке - mv: невозможно указать `* .JPG ': нет такого файла или каталога
Марк Флинт
1
у вас нет JPG там.
Кароли Хорват,