0

我有一个带有 identify 命令输出的文件,如下所示(遵循格式:FILENAME FORMAT SIZE METADATA

/foo/bar.jpg JPEG 2055x1381 2055x1381+0+0 8-bit DirectClass 
/foo/ham spam.jpg JPEG 855x781 855x781+0+0 8-bit DirectClass
...

请注意,文件名可以包含空格!我想要做的是基本上在每一行上运行它:

convert -size <SIZE> -colors 1 xc:black <FILENAME>

换句话说,创建现有图像的空白图像。我试过用 cat/sed/xargs 来做这件事,但它让我的脑袋爆炸了。有什么提示吗?最好是命令行解决方案..

4

3 回答 3

1

假设该文件名是“JPEG”之前的字符串:

LINE="/foo/ham spam.jpg JPEG 855x781 855x781+0+0 8-bit DirectClass"

你可以得到文件名:

FILENAME=$(echo "$LINE" | sed 's/\(.*\) JPEG.*/\1/')
于 2011-08-01T10:54:27.227 回答
1
cat data_file | sed -e 's/\(.*\) JPEG \([^ ]*\) .*/convert -size \2 -colors 1 xc:black "\1"/' | bash
于 2011-08-01T11:45:53.373 回答
0

你可以按照 Michał 的建议去做。此外,如果元数据具有固定数量的单词,您可以像下面这样轻松地执行此操作(假设您处理每一行):

FILENAME=`echo $LINE | rev | cut -d\  -f 6- | rev`

(即反转行,从第六个参数开始取名字,然后你必须反转才能获得正确的文件名。)

如果没有,您可以使用所有图像都有扩展名并且扩展名本身没有空格的事实,然后搜索扩展名直到第一个空格:

FILENAME=`echo $LINE | sed -e '/([^.]+) .*$/\1/'`
于 2011-08-01T11:10:35.993 回答