Nadaj wszystkim plikom rozszerzenie .jpg

8

Mam katalog, a niektóre rozszerzenia plików są pisane wielkimi literami (.JPG) zamiast małymi.

Chcę się upewnić, że każdy plik ma rozszerzenie .jpg. Jak mam to zrobić z wiersza poleceń powłoki?

Mark Flint
źródło
Szkoda, że ​​Linux nie ma AppleScript.
gadgetmo
2
Jest tak świetny, że Linux nie ma AppleScript.
matematyka

Odpowiedzi:

15

Korzystanie z rozszerzenia parametru powłoki :

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

Te "znaki będą dbać o nazwach zawierających spacje, jak często robić fotografie.

Johnsyweb
źródło
5
+1 To rozwiązanie działa nawet jeśli masz spacje w nazwie pliku, ale masz na myśli „$ f” zamiast „f”.
Adam Zalcman,
Rozszerzanie parametrów powłoki jest nieco tajemnicze, zamiast tego można użyć basename: dla f w * .JPG; do mv "$ f" "` basename $ f .JPG`.jpg "; zrobione
matematyka
@math: Wolę moją wersję, ponieważ działa z nazwami plików zawierającymi białe znaki i będzie z nią współpracować /path/to/*.JPG. Oczywiście,
proszę
Oczywiście basename usunie wiodące katalogi, ale będzie działał ze spacjami w nazwach plików. (Nie sądzę, żeby warto było odpowiedzieć;) więc opublikowałem to jako komentarz)
matematyka
10

Jeśli możesz korzystać z zewnętrznych narzędzi (nie tylko bash), sprawdź renamepolecenie!

rename .JPG .jpg *

renameJest częścią util-linux.

uzsolt
źródło
zmiana nazwy jest ... problematyczna. Dostarczana jest wersja zmiany nazwy, perlktóra akceptuje różne argumenty, aby zrobić to samo.
cha0site
Czy możesz wyjaśnić coś więcej? Która wersja BTW?
matematyka
3

Jeśli masz spacje w nazwach plików:

for f in *.JPG; do [[ -f "${f}" ]] && mv "${f}" "${f/%JPG/jpg}"; done
cha0site
źródło
2

Proponuję rzucić okiem na mmvpolecenie. Nadaje się idealnie do tego rodzaju zadań. W twoim scenariuszu byłoby to:

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

Strona podręcznika jest pełna przykładów, więc nie trzeba długo przyzwyczajać się do niej.

W systemach Debian można go zainstalować z:

#> aptitude install mmv
Alessandro Dotti Contra
źródło
0

jeśli nie masz spacji w nazwach plików:

for f in *.JPG; do mv $f `echo $f | sed 's/JPG$/jpg/'`; done
Karoly Horvath
źródło
1
Łatwo byłoby sprawić, by działało to dla plików ze spacjami w nazwie: wystarczy dodać podwójne cudzysłowy wokół obu argumentów mv.
Adam Zalcman,
Nie mam spacji Co dodać, aby tak się stało w katalogu CURRENT. W tej chwili pojawia się błąd - mv: nie można stat `* .JPG ': Brak takiego pliku lub katalogu
Mark Flint
1
nie masz tam żadnych plików JPG.
Karoly Horvath,