Jér*_*ôme 7 linux bash shell imagemagick
我想在目录中调整图像列表的大小.为了达到这个目的,我使用convert了imagemagick.我想调整大小
image1.jpg
image2.jpg
...
成
image1-resized.jpg
image2-resized.jpg
...
我想知道是否有一种方法可以在一个命令行中实现这一点.优雅的解决方案通常很有用,不仅仅是在这种情况下.
编辑:
我想要一个非 脚本式的解决方案,即.没有for循环.
Joh*_*iss 10
如果要将它们调整为800x600:
for file in *.jpg; do convert -resize 800x600 -- "$file" "${file%%.jpg}-resized.jpg"; done
(在bash中工作)
ls *.jpg|sed -e 's/\..*//'|xargs -I X convert X.jpg whatever-options X-resized.jpg
如果你愿意接受一个稍微不同的最终文件名'resized-image1.jpg'而不是'image1-resized.jpg',你可以消除sed和扩展通用:
ls|xargs -I X convert X whatever-options resized-X
GNU Parallel比 for 循环更容易,而且通常更快:
parallel convert -resize 800x600 -- "{}" "{.}-resized.jpg" ::: *.jpg
这里发生了一些事情,从右到左:
::: *.jpg 意味着为每个 jpg 文件运行命令{.}表示插入不带后缀 ( .jpg)的当前文件名{} 表示插入当前文件名parallel意味着并行多次运行以下命令。它将选择并行执行的最大值以匹配您的计算机拥有的内核数。每个完成后,它将启动下一个,直到所有 jpg 文件都被转换。这会convert --resize 800x600 -- foo.jpg foo-resized.jpg为每个文件运行命令。该--告诉转换到停止处理标志,如果一个文件名恰好开始一个-。  
PS 在我的 Mac 上,我安装了Homebrew,所以我能够并行安装并转换
brew install parallel
brew install imagemagick