如何recursivly使用JpegTran(命令行)优化子目录中的所有文件?(How to rec

2019-08-01 07:58发布

我曾在多个目录中的照片。 我想用jpegtran(命令行工具)recursivly通过每一个,对其进行优化,并保存(覆盖它)

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

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

但我不能让它recursivly工作,覆盖相同的文件(而不是到一个新的文件名)

有小费吗?

Answer 1:

jpegtran整个目录

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


Answer 2:

如何使用find命令:

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

运行命令,如果你喜欢的输出,去除echo来执行它。



Answer 3:

它通常是更容易了一大堆使用发现在这种情况下,因为你想要做什么是对一些文件名的行为find工具会给你这些名字。 假设你有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是不允许的,因为同时从读,写同一个文件是不是在bash一个定义良好的,甚至支持的操作。



文章来源: How to recursivly use JpegTran (command line) to optimise all files in subdirs?