2012-10-11 13 views
8

tôi có Ảnh trong nhiều thư mục. Tôi muốn sử dụng jpegtran (lệnh công cụ dòng) để recursivly đi qua mỗi một, tối ưu hóa nó, và lưu nó (ghi đè lên nó)Làm cách nào để sử dụng đệ quy JpegTran (dòng lệnh) để tối ưu hóa tất cả các tệp trong subdirs?

nếu họ là tất cả trong một thư mục tôi sử dụng này

for JPEG in *.jpg ; do jpegtran -optimize $JPEG > $JPEG; done 

nhưng tôi không thể làm cho nó hoạt động đệ quy và ghi đè lên cùng một tệp (thay vì một tên tệp mới)

bất kỳ mẹo nào?

Trả lời

5

Làm thế nào về việc sử dụng find lệnh:

find /your/dir -name '*.jpg' -exec echo jpegtran -optimize {} \; 

Chạy lệnh, nếu bạn thích các đầu ra, loại bỏ echo để thực hiện nó.

+0

jpegtran có đầu ra mặc định trên thiết bị xuất chuẩn. –

3

Thường thì việc sử dụng tìm thấy số trong trường hợp này càng tốt, vì những gì bạn muốn làm là hành động trên một vài tên tệp. tìm tiện ích sẽ cung cấp cho bạn những tên đó. Giả sử bạn có các công cụ GNU (hoặc thậm chí cả BSD), ví dụ sau đây sẽ minh họa cho kịch bản chung này.

Ví dụ:

$ find ~/images/wallpapers/TEMP/ -type f -iname '*jpg' \ 
    -exec sh -c 'jpegtran -outfile {}.out -optimize {}; mv {}.out {} ' \; 
  1. tìm tìm kiếm tất cả các file có đuôi jpg trong thư mục TEMP, đệ quy.
  2. Đối với mỗi con đường tập tin đầy đủ tìm thấy (biểu thị bằng '{}'), tìm sẽ chạy lệnh trao cho exec
  3. cheats tùy chọn exec và chạy một số lệnh thay vì một qua sh

Ghi chú

cat file > file không được phép bởi vì đồng thời REA ding từ, và ghi vào cùng một tập tin không phải là một hoạt động được xác định rõ hoặc thậm chí được hỗ trợ trong bash.

22

jpegtran whole directory

find /the/image/path -name "*.jpg" -type f -exec jpegtran -copy none -optimize -outfile {} {} \; 
+0

Số lần thăng hạng bị bỏ phiếu do lỗi –

+0

noooooooooo !!! ;) – Bas