Một giải pháp hay là tạo một bộ sao lưu (ví dụ tiền tố backup-
), xoay các tệp gốc tạo ra một tập các tệp mới (ví dụ tiền tố rotated-
), cung cấp cho bạn một bộ
img-1.png
backup-img-1.png
rotated-img-1.png
img-2.png
- ... và cứ thế
Các mv
/ cp
công cụ [bash globbing] chỉ có thể thêm tiền tố, nó lộn xộn để đưa họ đi (nó muốn sử dụng mở rộng tham số, ewww ...)
Công rename
cụ cho phép bạn sử dụng s/before/after/
cú pháp thay thế (từ sed
công cụ) để hoán đổi tiền tố bảo vệ đó và ghi đè lên các tệp gốc, do đó quy trình tổng thể của bạn cho một bộ ảnh đã cho img-
{1..n}.png
sẽ là:
for imgf in img-*.png; do mv "$imgf" "backup-$imgf"; done
for imgf in backup-img-*.png; do convert "$imgf" -rotate 90 "rotated-$imgf"; done
Chú thích:
- bạn có thể sử dụng
cp
chứ không phải mv
, nhưng sau đó có 2 bản sao gốc nằm xung quanh (nhược điểm là bạn có thể ghép các tiền tố, " rotated-backup-
...")
- xoay theo chiều kim đồng hồ (
-rotate 270
giúp bạn 90 ° ngược chiều kim đồng hồ)
- để theo dõi tiến trình, thêm
echo "Rotating ${imgf#backup-} ... ";
sau convert
các cuộc gọi (trước done
)
đối với dạng gọn hơn (ví dụ: tập hợp các tệp được đánh số), echo "$(echo ${imgf#backup-img-} | cut -d\. -f 1)...";
thay vào đó hãy sử dụng một số mở rộng tham số như
(Bạn không thể xóa tiền tố và hậu tố trong cùng một bản mở rộng bash param do đó sử dụng cut
)
Sau khi xác minh bạn không làm hỏng, hãy xóa ảnh bằng cách di chuyển chúng trở lại ban đầu
rename 's/^rotated-//;' rotated-*
rm backup-img-*