我对 shell 脚本还很陌生,我正在努力从命令中获取我需要的信息。
我正在执行这个脚本:
#!/bin/bash
myfunction(){
find . -name '*' -exec file {} \; | grep "image"
}
myfunction
基本上,我需要的是我的目录中图像的名称列表以及有关其分辨率的数据,但我得到了很多对我来说无用的数据:
./image222s.jpeg: JPEG image data, JFIF standard 1.01, aspect ratio, density 1x1, segment length 16, baseline, precision 8, 554x554, components 3
./fruta-png.png: PNG image data, 1400 x 1501, 8-bit/color RGBA, non-interlaced
./ddd.jpeg: JPEG image data, JFIF standard 1.01, aspect ratio, density 1x1, segment length 16, baseline, precision 8, 540x568, components 3
./images.jpeg: JPEG image data, JFIF standard 1.01, aspect ratio, density 1x1, segment length 16, baseline, precision 8, 452x678, components 3
我想知道如何将输出缩减为仅显示文件名及其分辨率。例如:
image.jpeg: 452x678
image222.jpeg: 554x554
谢谢!
答案1
如果您可以使用identify
工具imagemagick
,您可以传递一个-format
字符串来仅打印所需的信息:
imagemagick
如果需要请安装:
sudo apt-get install imagemagick
然后运行:
find . -type f -exec identify -format "%i: %P\n" {} \; 2>/dev/null
(或者+
取而代之,\;
这样会更快,但只会在最后打印)。
如果您有很多与 匹配的非图像文件find
,您可能需要先过滤这些文件,因为file
会比 更快identify
:
find . -type f -exec sh -c 'file "$1" | grep -q image' find-sh {} \; -exec identify -format '%i: %P\n' {} \;
请注意,这file
可能会过滤一些它不知道的文件格式identify
,例如 RAW 图像。