我曾在多个目录中的照片。 我想用jpegtran(命令行工具)recursivly通过每一个,对其进行优化,并保存(覆盖它)
如果他们都在一个文件夹中我用这个
for JPEG in *.jpg ; do jpegtran -optimize $JPEG > $JPEG; done
但我不能让它recursivly工作,覆盖相同的文件(而不是到一个新的文件名)
有小费吗?
我曾在多个目录中的照片。 我想用jpegtran(命令行工具)recursivly通过每一个,对其进行优化,并保存(覆盖它)
如果他们都在一个文件夹中我用这个
for JPEG in *.jpg ; do jpegtran -optimize $JPEG > $JPEG; done
但我不能让它recursivly工作,覆盖相同的文件(而不是到一个新的文件名)
有小费吗?
jpegtran整个目录
find /the/image/path -name "*.jpg" -type f -exec jpegtran -copy none -optimize -outfile {} {} \;
如何使用find
命令:
find /your/dir -name '*.jpg' -exec echo jpegtran -optimize {} \;
运行命令,如果你喜欢的输出,去除echo
来执行它。
它通常是更容易了一大堆使用发现在这种情况下,因为你想要做什么是对一些文件名的行为 。 find工具会给你这些名字。 假设你有GNU(或者甚至BSD)的工具,下面的例子可以说明这种常见的场景。
例如:
$ find ~/images/wallpapers/TEMP/ -type f -iname '*jpg' \
-exec sh -c 'jpegtran -outfile {}.out -optimize {}; mv {}.out {} ' \;
笔记
cat file > file
是不允许的,因为同时从读,写同一个文件是不是在bash一个定义良好的,甚至支持的操作。