Điểm:5

ImageMagick chuyển đổi trên nhiều tệp

lá cờ ru

Tôi có 3 tệp trong một thư mục:

aaa.jpg    
bbb.jpg  
ccc.jpg  

Tôi có thể thu nhỏ hình ảnh bằng ImagkMagick convert:

chuyển đổi aaa.jpg -thay đổi kích thước 1200x900 aaa-small.jpg  

Tôi muốn làm tất cả các hình ảnh trong thư mục, đại loại như:

chuyển đổi *.jpg -resize 1200x900 *-small.jpg  

nhưng điều này dẫn đến các tệp có tên như vậy:

*-small-0.jpg  
*-small-1.jpg  
*-small-2.jpg  

Những gì tôi muốn là:

aaa-nhỏ.jpg  
bbb-nhỏ.jpg  
ccc-nhỏ.jpg  

Làm thế nào để tôi làm điều này?

Brian Z avatar
lá cờ uz
Mogrify là lệnh ImageMagick được thiết kế cho các công việc hàng loạt. Câu hỏi liên quan đến và có thể trùng lặp với câu hỏi này: https://superuser.com/questions/597428/how-can-i-run-mogrify-but-prefix-the-filename
Điểm:9
lá cờ hr

Nó mờ đục một cách bực bội trong tài liệu, nhưng bạn có thể vượt qua một trích dẫn quả cầu vỏ để đổi (được trích dẫn để ngăn Shell mở rộng sớm) và sử dụng Tên tệp Phần trăm thoát để xây dựng tên tệp đầu ra ở dạng %[tên tập tin:nhãn] (ở đâu nhãn mác là một nhãn tùy ý do người dùng chỉ định), sử dụng thoát tên cơ sở đầu vào %[tên cơ sở] hoặc di sản tương đương của nó %t:

$ ls ???.jpg
aaa.jpg bbb.jpg ccc.jpg

sau đó

$ convert '*.jpg' -set filename:fn '%[basename]-small' -resize 1200x900 '%[filename:fn].jpg'

dẫn đến

$ ls ???-small.jpg
aaa-small.jpg bbb-small.jpg ccc-small.jpg
Điểm:6
lá cờ jp

Trong vòng lặp for, có thể sử dụng các tính năng được mô tả trong người đàn ông bash tại

Mở rộng tham số
...
  ${tham số%%word}
      Loại bỏ mẫu hậu tố phù hợp. Từ được mở rộng để tạo ra một mẫu chỉ
      như trong phần mở rộng tên đường dẫn. Nếu mẫu phù hợp với một phần cuối của
      giá trị mở rộng của tham số, thì kết quả của việc mở rộng là giá trị được mở rộng
      giá trị của tham số có mẫu phù hợp ngắn nhất (trường hợp ``%'') hoặc
      mẫu phù hợp dài nhất (trường hợp ``%%'') đã bị xóa. Nếu tham số là @ hoặc *,
      lần lượt thao tác loại bỏ mẫu được áp dụng cho từng tham số vị trí,
      và phần mở rộng là danh sách kết quả. Nếu tham số là biến mảng
      được đăng ký bằng @ hoặc *, thao tác loại bỏ mẫu được áp dụng cho từng thành viên
      lần lượt của mảng và phần mở rộng là danh sách kết quả.

Một lớp lót sau đây sẽ thực hiện công việc

cho f trong ./*.jpg ; chuyển đổi "$f" -resize 1200x900 "${f%.jpg}-small.jpg" ; xong

Điều này hoạt động trong đánh đập, là shell tiêu chuẩn của Ubuntu.Tôi nghĩ nó dễ nhớ hơn phương pháp thanh lịch của Steeldriver (người chỉ sử dụng đổi và không xây dựng).

rexkogitans avatar
lá cờ cn
+1 vì nó tuân theo triết lý Unix rằng mỗi công cụ nên thực hiện một phần nhỏ công việc một cách hiệu quả, thay vì một công cụ làm mọi thứ.
7efkvNEq avatar
lá cờ gh
Tôi khuyên bạn nên đổi tên tệp từ `*.jpg` thành `./*.jpg` trong trường hợp một số tên bắt đầu bằng `-`.
sudodus avatar
lá cờ jp
@7efkvNEq, Cảm ơn, đó là một ý kiến ​​hay.
Điểm:-2
lá cờ bd
mkdir nhỏ
cho f trong *.jpg ; thực hiện chuyển đổi $f -resize 1200x900 small/$f ; xong
lá cờ ru
Điều này không trả lời câu hỏi. Các tên tập tin là như nhau.
sudodus avatar
lá cờ jp
@AlLelopath, Đúng, tên tệp giống nhau, nhưng trong một thư mục khác. Tôi đã sử dụng phương pháp này và tôi nghĩ nó tốt ;-)

Đăng câu trả lời

Hầu hết mọi người không hiểu rằng việc đặt nhiều câu hỏi sẽ mở ra cơ hội học hỏi và cải thiện mối quan hệ giữa các cá nhân. Ví dụ, trong các nghiên cứu của Alison, mặc dù mọi người có thể nhớ chính xác có bao nhiêu câu hỏi đã được đặt ra trong các cuộc trò chuyện của họ, nhưng họ không trực giác nhận ra mối liên hệ giữa câu hỏi và sự yêu thích. Qua bốn nghiên cứu, trong đó những người tham gia tự tham gia vào các cuộc trò chuyện hoặc đọc bản ghi lại các cuộc trò chuyện của người khác, mọi người có xu hướng không nhận ra rằng việc đặt câu hỏi sẽ ảnh hưởng—hoặc đã ảnh hưởng—mức độ thân thiện giữa những người đối thoại.