对多个文件执行命令

对多个文件执行命令

我需要执行jpeg 重新压缩针对数千个文件。我尝试过:

for image in *.jpg; do
    image2=${image%.*}.jpg;
    ./jpeg-recompress /path/to/images/$image /path/to/images/$image2;
    echo "Processing $image2 file...";
done

但却没有这样做,理由是:Maximum number of arguments exceeded 我尝试使用 find,如下所示:

find /path/to/images -iname “*.jpg” | while read image; do

(以及前一个论点的其余部分)

但它似乎什么也没做。我想知道如何在多个文件上利用这个程序?

jpeg-recompress image.jpg image.jpg

(确实取代了原来的版本)

答案1

只需查找即可做一些简单的事:

find /path/to/images -name '*.jpg' -exec jpeg-recompress {} \;

或者如果你有多个核心,你可以写一个循环来并行压缩多个文件

答案2

大型文件列表

有很多方法可以解决这个问题。首先想到的是使用 find。

for image in `find /path/to/jpegs -type f -name *.jpg`
do
 something
done

还有一个xargs可能有用的命令。

继续使用 for 循环可能会更有优势;相比单独使用 find,您可以将已处理的 jpeg 文件附加到日志文件中,这样下次运行命令时就可以跳过它们(如果您愿意的话)。

相关内容