我有一个名为的目录,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
? 换行符只是为了“可读性”。