Как напечатать только часть вывода

Я немного новичок в сценариях оболочки и изо всех сил пытаюсь получить из команды только ту информацию, которая мне нужна.

Я выполняю этот скрипт:

#!/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

Спасибо!

2
задан 18 September 2019 в 16:26

1 ответ

Если можно использовать identify инструмент от imagemagick, можно передать a -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 мог сделать, например, НЕОБРАБОТАННЫЕ изображения.

1
ответ дан 23 October 2019 в 11:35

Другие вопросы по тегам:

Похожие вопросы: