我有文件结构,里面有子目录和图像文件。我想使用 GraphicsMagick 将图像文件转换为另一种格式(并使它们更小)。我可以用这样的简单命令来做到这一点:
mogrify -path ../img-converted -format jpg ../content/*.jpg
但是当我尝试保留子目录结构时,事情变得复杂了。Mogrify 没有这个选项,所以我需要编写 shell 脚本来检查所有目录(并可能创建新目录)。
这应该怎么做?
我有文件结构,里面有子目录和图像文件。我想使用 GraphicsMagick 将图像文件转换为另一种格式(并使它们更小)。我可以用这样的简单命令来做到这一点:
mogrify -path ../img-converted -format jpg ../content/*.jpg
但是当我尝试保留子目录结构时,事情变得复杂了。Mogrify 没有这个选项,所以我需要编写 shell 脚本来检查所有目录(并可能创建新目录)。
这应该怎么做?
假设 Windows 操作系统被标记为问题batch-file
。
首先,robocopy
用于将所有子文件夹结构从源文件夹复制到目标文件夹。然后,遍历源文件夹并递归它的子文件夹,获取完整的源和目标(子)路径并回显它们。由于不确定mogrify
使用,因此根据我的(错误)理解@echo mogrify ...
制定......
@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
这对我有用 - 它调整当前文件夹和所有子文件夹中所有 jpg 文件的大小,同时保留文件夹结构:
find -iname '*.jpg' -exec mogrify -sampling-factor 4:2:0 -strip -quality 85 -interlace JPEG -colorspace sRGB -resize '2560x2560>' {} +