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?


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.


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.


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

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

0

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

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

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,
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.