You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

递归查找Dev目录并使用ImageMagick Convert缩放复制图片

问题解决:递归查找Dev目录并缩放复制图片

你之前的命令报错是因为find的-exec参数无法直接执行shell循环语句,必须通过调用bash来包裹循环逻辑,同时要正确处理路径中的空格和变量传递。以下是修正后的命令及说明:

正确命令

find . -name 'Dev' -type d -exec bash -c '
  target_dir="/Volumes/IMAGES2023/IMAGES2023/senior-collect"
  # 确保目标目录存在,不存在则创建
  mkdir -p "$target_dir"
  # 遍历当前Dev目录下的常见图片格式,可按需添加更多格式(如webp)
  for img in "$1"/*.{jpg,jpeg,png,gif}; do
    # 跳过未匹配到的格式(避免处理类似"*.webp"的非文件)
    [ -f "$img" ] || continue
    # 获取图片文件名
    filename=$(basename "$img")
    # 缩放并保存到目标目录
    convert "$img" -resize 300x300 "$target_dir/$filename"
  done
' bash {} \;

关键说明

  1. bash -c的作用:将循环逻辑作为bash脚本执行,find找到的Dev目录路径会作为参数$1传递给脚本,解决了-exec无法直接解析shell循环的问题。
  2. 引号包裹变量:所有路径变量都用双引号包裹,避免文件名或目录名含空格时出现解析错误。
  3. 图片格式过滤:通过*.{jpg,jpeg,png,gif}指定要处理的图片格式,可根据实际需求添加或修改(比如加上webp)。
  4. 目标目录预创建:mkdir -p确保目标目录存在,防止convert因目录不存在而报错。

可选优化

  • 如果需要忽略目录名大小写(同时匹配dev/Dev/DEV),将-name 'Dev'改为-iname 'dev'。
  • 如果Dev目录下还有子目录需要递归处理图片,可将命令改为直接查找图片文件:
find . -path '*/Dev/*' -type f \( -iname '*.jpg' -o -iname '*.png' -o -iname '*.jpeg' -o -iname '*.gif' \) -exec bash -c '
  target_dir="/Volumes/IMAGES2023/IMAGES2023/senior-collect"
  mkdir -p "$target_dir"
  filename=$(basename "$1")
  convert "$1" -resize 300x300 "$target_dir/$filename"
' bash {} \;

内容的提问来源于stack exchange,提问作者natefromdetroit

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.22 20:13:25