如何递归使用JpegTran(命令行)来优化子目录中的所有文件?

时间:2012-10-11 02:27:34

标签: macos bash command-line operating-system jpeg

我在多个目录中有照片。我想使用jpegtran(命令行工具)来递归遍历每个,优化它,并保存它(覆盖它)

如果它们都在一个文件夹中我使用这个

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

但我无法让它以递归方式工作并覆盖同一个文件(而不是新文件名)

任何提示?

3 个答案:

答案 0 :(得分:23)

jpegtran whole directory

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

答案 1 :(得分:5)

如何使用find命令:

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

运行命令,如果您喜欢输出,请删除echo以执行它。

答案 2 :(得分:3)

在这种情况下使用查找通常要容易得多,因为您想要做的是在几个文件名上 act 查找实用程序会为您提供这些名称。假设你有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
  4. 欺骗并运行多个命令而不是一个命令

    备注

    cat file > file是不允许的,因为在 bash 中同时读取和写入同一文件并不是一个定义明确甚至支持的操作。