当目标缺少子目录时,使用“转换”命令会遇到问题

当目标缺少子目录时,使用“转换”命令会遇到问题

我有一个名为的目录,src里面全是子目录和其他图像。我尝试使用一个 bash 语句将它们全部自动调整到另一个目标目录中,thumb如下所示:

find ./src -type f -follow -iname '*.jp*g' -exec convert -resize 150x150x "{}" "./thumb/${size}/{}" \;

这不起作用,因为该thumb目录最初是空的,并且没有与相同的目录结构src

我尝试查找,man convert但似乎找不到自动创建目录的选项convert。有什么有效的方法可以将thumb目录中的所有图像转换为缩略图大小?我需要预先创建缩略图中的所有子目录吗?


编辑

我在上面的命令前面加上了以下内容:

find ./src -type d -follow -exec mkdir -p "thumb/${size}/{}" \;

但我很好奇,我是否可以用一个命令而不是两个命令来完成所有事情?

答案1

UNIX 哲学是拥有只做一件事的命令。可以写入文件的命令,而不是标准输出已经扩大了这一规则。

是否可以用一个命令完成所有操作取决于你的定义。这样做:

find ./src -type f -follow -iname '*.jp*g' -exec /bin/sh -c \
'mkdir -p `dirname "thumb/'${size}'/{}"` &&'\
'convert -resize 150x150x "{}" "./thumb/'${size}'/{}' \;

算作一条命令或多条命令:find, sh, mkdir, dirname, convert? 换行符只是为了“可读性”

相关内容