2012-10-11 53 views
8

我有多個目錄中的照片。我想用jpegtran(命令行工具)recursivly通過每一個,對其進行優化,並保存(覆蓋它)如何遞歸使用JpegTran(命令行)來優化子目錄中的所有文件?

,如果他們都在一個文件夾中我用這個

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

但我不能得到它的工作遞歸和覆蓋相同的文件(而不是一個新的文件名)

任何提示?

回答

5

如何使用find命令:

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

運行的命令,如果你喜歡的輸出,除去echo執行它。

+0

jpegtran對標準輸出默認輸出。 –

3

它通常是更容易了一大堆使用找到在這種情況下,因爲你想要做什麼是對一些文件名行爲找到實用程序會給你這些名字。假設你有GNU(甚至可能是BSD)工具,下面的例子將說明這種常見的情況。

例如:

$ find ~/images/wallpapers/TEMP/ -type f -iname '*jpg' \ 
    -exec sh -c 'jpegtran -outfile {}.out -optimize {}; mv {}.out {} ' \; 
  1. 找到查找在TEMP文件夾JPG結尾的文件,遞歸。
  2. 對於找到的每個完整的文件路徑(表示爲`{}'),找到將運行給-exec
  3. -exec選項祕籍的指令,並通過SH運行若干命令而不是一個

cat file > file是不允許的,因爲同時REA ding和寫入同一個文件在bash中不是一個明確定義甚至支持的操作。

22

jpegtran whole directory

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

Oups下跌由錯誤投票 –

+0

noooooooooo !!! ;) – Bas

相關問題