Chci otočit všechny obrázky v adresáři, které odpovídají vzoru.
Zatím mám:
for file in `ls /tmp/p/DSC*.JPG`; do
convert $file -rotate 90 file+'_rotated'.JPG
done
ale to nedává žádný výstup?
Přijatá odpověď:
S vaším kódem je poměrně dost problémů. Za prvé, analyzujete ls, což je špatný nápad. Musíte také odkazovat na proměnnou jako $file
jak uvádíte a měli byste to také citovat, aby se nerozbil na mezerách. Deklarujete num
ale nikdy se nepoužívá. Bezpečnější způsob by byl:
find /tmp/p/ -name "DSC*.JPG" | while IFS= read -r file; do
convert "$file" -rotate 90 "$file"_rotated.JPG
done
To bude mít stále problémy, pokud vaše soubory obsahují nové řádky, ale alespoň se nepřeruší, pokud vaše cesta obsahuje mezery.
Pokud jsou všechny soubory ve stejném adresáři, lze to dále zjednodušit pomocí globbingu. K vytvoření foo_rotated.JPG1
můžete také použít rozšíření parametrů místo foo.JPG_rotated.JPG
:
for file in /tmp/p/DSC*.JPG; do
convert "$file" -rotate 90 "${file%.JPG}"_rotated.JPG
done
Linux – Jak nastavit afinitu procesoru k procesu v Linuxu?
Proč má nový adresář počet pevných odkazů 2, než se do něj něco přidá?