如何仅打印部分输出

如何仅打印部分输出

我对 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 图像。

相关内容