我有一个带有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做这个,但它让我的脑袋爆炸了。任何提示?最好是命令行解决方案..
答案 0 :(得分:1)
假设该文件名是“JPEG”之前的字符串:
LINE="/foo/ham spam.jpg JPEG 855x781 855x781+0+0 8-bit DirectClass"
您可以将文件名称设为:
FILENAME=$(echo "$LINE" | sed 's/\(.*\) JPEG.*/\1/')
答案 1 :(得分:1)
cat data_file | sed -e 's/\(.*\) JPEG \([^ ]*\) .*/convert -size \2 -colors 1 xc:black "\1"/' | bash
答案 2 :(得分:0)
你可以做Michał建议的事情。此外,如果元数据具有固定数量的单词,您可以像下面这样轻松地执行此操作(假设您处理每一行):
FILENAME=`echo $LINE | rev | cut -d\ -f 6- | rev`
(也就是说,反转该行,并从第六个参数中取名,然后你必须反转以获得正确的文件名。)
如果没有,你可以使用这样的事实:所有图像都有一个扩展名,扩展名本身没有空格,然后搜索扩展名直到第一个空格:
FILENAME=`echo $LINE | sed -e '/([^.]+) .*$/\1/'`