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


8

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

Я хочу переконатися, що кожен файл має .jpg як своє розширення. Як би це зробити з підказки оболонки?


Прикро, що в Linux немає AppleScript.
гаджетмо

2
Це так чудово, що у Linux немає AppleScript.
математика

Відповіді:


15

Використання розширення параметрів оболонки :

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

Ці "символи будуть піклуватися про іменах файлів , що містять пробіли, так як фотографії часто.


5
+1 Це рішення працює, навіть якщо у назві файлу є пробіли, але ви маєте на увазі "$ f" замість "f".
Адам Зальцман

Розширення параметрів оболонки трохи загадковим, замість нього можна використовувати базову назву: for f in * .JPG; do mv "$ f" "` базове ім'я $ f .JPG`.jpg "; виконано
математика

@math: Я віддаю перевагу моїй версії, оскільки вона працює з іменами файлів, що містять пробіли, і також працюватиму /path/to/*.JPG. Звичайно, ви можете надіслати власну відповідь :)
Johnsyweb

Звичайно, базове ім’я зніме провідні каталоги, але буде працювати з пробілами всередині імен файлів. (Я не думаю, що на це варто відповісти;) тому я опублікував це як коментар)
математика

10

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

rename .JPG .jpg *

Це renameчастина util-linux.


перейменувати ... проблематично. Існує версія перейменування, яка постачається разом із тим, perlщо приймає різні аргументи, щоб зробити те саме.
cha0site

Не могли б ви пояснити трохи більше? Яка версія BTW?
математика

3

Якщо у вас є пробіли у іменах:

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

2

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

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

Сторінка чоловіка рясніє прикладами, тому звикати до неї не потрібно часу.

У системах Debian його можна встановити за допомогою:

#> aptitude install mmv

0

якщо у назви файлів немає пробілів:

for f in *.JPG; do mv $f `echo $f | sed 's/JPG$/jpg/'`; done

1
Буде досить просто зробити цю роботу для файлів з пробілами в імені: просто додайте подвійні лапки навколо обох аргументів mv.
Адам Зальцман

У мене немає пробілів. Що я можу додати, щоб це сталося у поточному каталозі. На даний момент я отримую помилку - mv: Не можу статист `* .JPG ': Немає такого файлу чи каталогу
Марк Флінт

1
у вас там немає жодного JPG.
Каролі Горват
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.