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


8

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

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


Жаль, что в Linux нет AppleScript.
gadgetmo

2
Это так здорово, что в Linux нет AppleScript.
математическое

Ответы:


15

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

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

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


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.


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

Не могли бы вы объяснить немного больше? Какая версия кстати?
математическое

3

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

for f in *.JPG; do [[ -f "${f}" ]] && mv "${f}" "${f/%JPG/jpg}"; done

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 там.
Кароли Хорват,
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.