如何通过以新名称保存调整大小的版本来调整图像大小?
How to resize an image by saving the resized version under a new name?
感谢您加入这个令人惊叹的社区。
在这里,我一直在与我的脚本作斗争,看起来我需要一个提示。
我有以下文件结构:
Mother_Directory/
./child1_Directory
file1.jpg
file2.JPG
file3.jpg
./child2_Directory
file1.jpg
file2.JPG
file3.jpg
./child3_Directory
file1.jpg
file2.JPG
file3.jpg
现在我想使用 imagemagick
的转换函数对子目录中的这些文件进行各种操作(比如调整大小),并将它们保存在 Mother_Directory_2/
(位于外部硬盘驱动器)以新名称命名。
例如external_HD_path/Mother_Directory_2/child2_Directory/resized_file1.jpg
。
这是我的代码:
for f in `find . -name "*.*"`; do convert $f -resize 50% ../Mother_Directory_2/$f; done
这个应该将新文件保存在 ../Mother_Directory_2/
,
但没有运气(即使没有名称更改逻辑)。我倾向于相信我想要实现的目标是微不足道的,但我不知道在哪里寻找提示。有简单的方法吗?
我认为问题在于您在目标目录中使用 $f 的方式。 $f 通常包含正在转换的文件的完整路径。相反,您可以尝试在脚本中使用 "basename"。
for f in `find . -name "*.*"`; do base=$(basename "$f") ; convert $f -resize 50% ../Mother_Directory_2/$base; done
鉴于很多人在这里搜索此解决方案,我想 post 根据所有评论和我经历过的 post 我设法编写的最简单的解决方案。
步骤1.在新的Mother_Directory_2中创建所有文件夹(从原来的Mother_Directory中获取文件夹的名称)
for d in */ ; do mkdir ~/Desktop/Mother_Directory_2/$d; done
步骤 2.
2.1.get子目录名使用
parentname="$(basename "$(dirname "$f")")"
2.2.使用
获取文件名
base=$(basename "$f")
3.3 运行 下面的脚本 (cd Mother_Directory)
for f in `find . -name "*.*"`; do base=$(basename "$f") ; parentname="$(basename "$(dirname "$f")")"; convert -resize 1000x1000 ./$parentname/$base ../Mother_Directory_2/$parentname/resize_$base; done
希望这会有所帮助 - 如果您是 Bash 专家,请提出更有效的方法。再次感谢。
感谢您加入这个令人惊叹的社区。
在这里,我一直在与我的脚本作斗争,看起来我需要一个提示。
我有以下文件结构:
Mother_Directory/
./child1_Directory
file1.jpg
file2.JPG
file3.jpg
./child2_Directory
file1.jpg
file2.JPG
file3.jpg
./child3_Directory
file1.jpg
file2.JPG
file3.jpg
现在我想使用 imagemagick
的转换函数对子目录中的这些文件进行各种操作(比如调整大小),并将它们保存在 Mother_Directory_2/
(位于外部硬盘驱动器)以新名称命名。
例如external_HD_path/Mother_Directory_2/child2_Directory/resized_file1.jpg
。
这是我的代码:
for f in `find . -name "*.*"`; do convert $f -resize 50% ../Mother_Directory_2/$f; done
这个应该将新文件保存在 ../Mother_Directory_2/
,
但没有运气(即使没有名称更改逻辑)。我倾向于相信我想要实现的目标是微不足道的,但我不知道在哪里寻找提示。有简单的方法吗?
我认为问题在于您在目标目录中使用 $f 的方式。 $f 通常包含正在转换的文件的完整路径。相反,您可以尝试在脚本中使用 "basename"。
for f in `find . -name "*.*"`; do base=$(basename "$f") ; convert $f -resize 50% ../Mother_Directory_2/$base; done
鉴于很多人在这里搜索此解决方案,我想 post 根据所有评论和我经历过的 post 我设法编写的最简单的解决方案。
步骤1.在新的Mother_Directory_2中创建所有文件夹(从原来的Mother_Directory中获取文件夹的名称)
for d in */ ; do mkdir ~/Desktop/Mother_Directory_2/$d; done
步骤 2.
2.1.get子目录名使用
parentname="$(basename "$(dirname "$f")")"
2.2.使用
获取文件名
base=$(basename "$f")
3.3 运行 下面的脚本 (cd Mother_Directory)
for f in `find . -name "*.*"`; do base=$(basename "$f") ; parentname="$(basename "$(dirname "$f")")"; convert -resize 1000x1000 ./$parentname/$base ../Mother_Directory_2/$parentname/resize_$base; done
希望这会有所帮助 - 如果您是 Bash 专家,请提出更有效的方法。再次感谢。