Chcę obrócić wszystkie obrazy w katalogu pasującym do wzorca.
Do tej pory mam:
for file in `ls /tmp/p/DSC*.JPG`; do
convert $file -rotate 90 file+'_rotated'.JPG
done
ale to nie daje wyników?
Chcę obrócić wszystkie obrazy w katalogu pasującym do wzorca.
Do tej pory mam:
for file in `ls /tmp/p/DSC*.JPG`; do
convert $file -rotate 90 file+'_rotated'.JPG
done
ale to nie daje wyników?
Odpowiedzi:
Z twoim kodem jest sporo problemów. Przede wszystkim analizujesz ls, co jest złym pomysłem . Musisz także odwoływać się do zmiennej, tak $file
jak to wskazałeś, i powinieneś ją również zacytować, aby nie pękała na spacjach. Deklarujesz, num
ale nigdy nie jest używany. Bezpieczniejszym sposobem byłoby:
find /tmp/p/ -name "DSC*.JPG" | while IFS= read -r file; do
convert "$file" -rotate 90 "$file"_rotated.JPG
done
Będzie to nadal powodować problemy, jeśli Twoje pliki zawierają znaki nowej linii, ale przynajmniej nie ulegną awarii, jeśli ścieżka zawiera spacje.
Jeśli wszystkie pliki znajdują się w tym samym katalogu, można je uprościć za pomocą globowania. Możesz także użyć rozszerzenia parametrów, aby utworzyć foo_rotated.JPG1
zamiast foo.JPG_rotated.JPG
:
for file in /tmp/p/DSC*.JPG; do
convert "$file" -rotate 90 "${file%.JPG}"_rotated.JPG
done
mogrify -rotate 90 *.jpg
Lepszy One-Liner do obracania wszystkich zdjęć za pomocą imagemagick
mogrify -rotate 90 /tmp/p/DSC*.JPG
wpłynie na obrót wszystkich, .JPG
zaczynając od DSC
w p
katalogu
Mogrify (część imagemagick ) różni się Convert
tym, że modyfikuje oryginalny plik
http://www.imagemagick.org/script/mogrify.php
Prostą metodą wykorzystującą PE (rozszerzenie parametrów) jest
for f in /tmp/p/DSC*.JPG
do
convert -rotate 90 "$f" "${f%.JPG}"_converted.JPG
done
bash
konkretnego, jest to całkowicie standardowa składnia sh POSIX.
Nie analizuj,ls
a ls
tutaj nie jest to wymagane. Ponadto powinieneś zacytować swoje zmienne, jeśli zawierają spacje.
for file in *.JPG; do
convert -rotate 90 "$file" rotated_"$file"
done
Nie wyobrażalne rozwiązanie, ale
sips -r 90 *.JPG
obróci wszystkie obrazy o rozszerzeniu .JPG o 90 stopni. To dobry jeden liniowiec.
Musiałem odnosić się do pliku jako $file
, tj
for file in `ls /tmp/p/DSC*.JPG`; do
convert $file -rotate 90 $file+'_rotated'.JPG
done
original_filename.JPG_rotated.JPG"
. dodanie"${file%.JPG}"_rotated.JPG
będzie bardziej odpowiednie imho. Twoje zdrowie!