Mogrify子文件夹并保留原始目录结构

时间:2014-12-17 04:17:47

标签: batch-file graphicsmagick mogrify

我的文件结构包含子目录和图像文件。我想使用GraphicsMagick将图像文件转换为另一种格式(并使它们更小)。我可以用这样简单的命令来做到这一点:

mogrify -path ../img-converted -format jpg ../content/*.jpg

但是当我尝试保留子目录结构时,事情变得复杂了。 Mogrify没有这个选项,所以我需要编写shell脚本来检查所有目录(也许可以创建新目录)。

应如何做到这一点?

2 个答案:

答案 0 :(得分:0)

假设Windows操作系统标记为batch-file

首先,使用robocopy将所有子文件夹结构从 source 文件夹复制到目标文件夹。然后,循环遍历 source 文件夹并递归它的子文件夹,获取完整的源和目标( sub )路径并回显它们。由于mogrify使用@echo mogrify ...根据我的( mis )理解它而不确定...

@ECHO OFF >NUL
@SETLOCAL enableextensions enabledelayedexpansion
set "source=content"
set "target=img-converted"
robocopy %source% %target% nonexistingfilename /E
FOR /R "content" %%G in (.) DO (
  set "sourcefldr=%%~dpnxG"
  set "targetfldr=!sourcefldr:%source%=%target%!"
  @echo !sourcefldr!    !targetfldr!
  if EXIST "!sourcefldr!\*.jpg" (
    @echo mogrify -path !targetfldr! -format jpg !sourcefldr!\*.jpg
    rem surround pathnames with double quotes if necessary as follows
    rem mogrify -path "!targetfldr!" -format jpg "!sourcefldr!\*.jpg"
  )
)
@ENDLOCAL
@goto :eof

中的nonexistingfilename(可以替换为^Nul

robocopy %source% %target% nonexistingfilename /E

命令确保仅复制文件夹结构 ,无文件。使用*.jpg代替复制所有*.jpg

robocopy %source% %target% *.jpg /E

答案 1 :(得分:0)

这对我有用 - 它会调整当前文件夹和所有子文件夹中所有 jpg 文件的大小,同时保留文件夹结构:

find -iname '*.jpg' -exec mogrify -sampling-factor 4:2:0 -strip -quality 85 -interlace JPEG -colorspace sRGB -resize '2560x2560>' {} +