修改子文件夹并保持原始目录结构

问题描述 投票:0回答:3

我有文件结构,里面有子目录和图像文件。我想使用 GraphicsMagick 将图像文件转换为另一种格式(并使它们变小)。我可以用这样的简单命令来完成:

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

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

这应该怎么做?

batch-file graphicsmagick mogrify
3个回答
2
投票

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

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

1
投票

假设 Windows 操作系统被标记为

batch-file

首先,使用

robocopy
将所有子文件夹结构从 source 文件夹复制到 destination 文件夹。然后,遍历 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


0
投票

现有的 Windows 答案一次只给一个文件给

mogrify
,这可能会减慢它的速度,因为它不能以相同的方式与 OpenMP 多线程。

这是我对批处理脚本的回答。它会移动当前目录中的所有匹配文件,然后也会移动所有子目录中的文件(递归)。将批处理脚本保存在您想要的目录中,然后执行它。

@echo off
echo MOGRIFY CURRENT DIRECTORY:
@echo on
magick mogrify -transparent white -trim +repage *.png
@echo off
echo:
echo MOGRIFY SUBDIRECTORIES:
@echo on
FOR /D /R %%A IN (*) DO magick mogrify -transparent white -trim +repage "%%A\*.png"
@echo off
echo:
echo SCRIPT COMPLETE
pause
© www.soinside.com 2019 - 2024. All rights reserved.