如何使用linux命令来设置文件集

时间:2009-06-30 17:58:25

标签: linux command-line terminal

我正在寻找一个解决方案,使用终端和linux下的命令“convert”转换一组文件。我可以为每个文件使用“convert”:

convert -quality 85 file.jpg file.jpg

但我正在寻找类似的东西:

for each jpg do
  convert -quality 85 $file $file
end

有人可以告诉我,我可以使用哪个命令?

7 个答案:

答案 0 :(得分:11)

for i in *.jpg; do
   convert ... $i $i
done

应该这样做。这适用于sh / bash / zsh等。它假定您的所有* .jpg文件都在当前目录中。否则,将* .jpg替换为适当的查找调用,例如

for i in `find . -name "*.jpg" -print`; do

注意反引号。这些表明应该执行封闭的命令,并将结果返回给调用结构(在本例中为for循环)

如果您使用的是zsh,那么您可以

for i in **/*.jpg; do

搜索通配符中的子目录,并使用advanced zsh wildcard syntax进一步限定这些子目录。但是我不确定bash在这个区域提供什么设施。

答案 1 :(得分:5)

通过覆盖自身来代替convert每个文件,您可以使用其姐妹命令mogrify来编辑文件。此外,这两个命令都有内置的globbing,因此它们可以在一次调用中修改所有图像,这比每个图像运行一次程序要快。有关详细信息,请参阅ImageMagick Command Line Processing

所以这样做:

mogrify '*.jpg' -quality 85

答案 2 :(得分:4)

如果您正在使用Bash,则可以执行以下操作:

$ for f in `ls path/to/jpegs/*.jpg`; do convert -quality 85 $f $f; done

这将遍历给定目录中的所有JPEG并转换它们。

如果你没有使用Bash,你的shell可能有类似的for循环语法;查看手册页。

答案 3 :(得分:3)

如果您有多核机器,您可以通过并行执行它们来获得一些真正的速度:

mkdir -p converted
find -iname '*.jpg' -print0 | xargs -0 -P<number of cores> -n1 -Ifoo convert -quality 85 foo converted/foo

答案 4 :(得分:1)

我写了一个shell脚本。如果您不熟悉shell编程,请参阅this page

#!/bin/sh

for arg in `ls *.jpg`
do
    convert -quality 85 $arg $arg
done

答案 5 :(得分:0)

怎么样? :

find [-maxdepth 1] -iname "*.jpg" -exec mogrify -quality 85 {} \;
  • 可选-maxdepth 1仅对当前目录(无子目录。)
  • 进行操作
  • ImageMagick附带mogrify,可以修改文件。

答案 6 :(得分:0)

find . -name '*.jpg' -exec convert -quality 85 {} {} \;