Найдите изображения размером: найдите / файл / awk

Попробуйте AUSTRUMI. Это легко, начальные загрузки с живого CD (или USB с помощью UNetbootin) и функции Compiz. Я не уверен, имеет ли это персистентность, но стоит дать ему движение. Я упоминал, что последний .iso (2.2.9) находится под 200 МБ?

9
26.10.2012, 01:39
6 ответов

я знаю, что это - немного излишества, но, это будет работать каждый раз (даже если будут пробелы в Вашем имени файла), и независимо от того, как файл отображает информацию.

find . -name '*.png' -exec file {} \; | sed 's/\(.*png\): .* \([0-9]* x [0-9]*\).*/\2 \1/' | awk 'int($1) > 500 {print}'

и это печатает размеры изображения и файла

explaination:

  1. find все файлы, названные *.png под. и поскольку каждый делает файл на нем

  2. использовать sed для печати только имени файла и размеров затем переупорядочивают для печати размеров сначала

  3. использовать awk протестировать первое число (высота рис.) проверка его большего, чем 500 и если это - размеры печати и имя файла, если не ничего не делают.

6
27.01.2020, 20:04
  • 1
    Спасибо. Я действительно должен был внести небольшое изменение - 1$ в awk аргументе 3$. Но это определенно получило его для меня. –  steve-er-rino 26.10.2012, 13:57
exiftool -q -r -ext png -if '$ImageHeight > 500' -p '$Directory/$FileName' .
11
27.01.2020, 20:04

Я чувствую, что что-то другое, чем утилиты оболочки было бы более соответствующим, например, Perl:

#!/usr/bin/perl

use File::Find;
use Image::Info qw(image_info dim);

find (\&check_height, './');

sub check_height {

  my $info = image_info( $_ );
  my ($width, $height) = dim( $info );
  print $_ . " has height $height\n" if ( $height > 500 );

}

Меньше защиты дамбой вокруг с попыткой проанализировать 7$; просто получите размеры непосредственно. Да, Вам будет нужно Изображение:: Информационный модуль, но, на CentOS/RHEL, это - стандартный пакет, таким образом, можно просто работать yum install perl-Image-Info.

5
27.01.2020, 20:04
  • 1
    В то время как жемчуг обычно отличное решение, это не в этом случае, особенно так как у меня нет Изображения:: Информация, ни опция установить. –  steve-er-rino 26.10.2012, 13:59
  • 2
    Решение для жемчуга несколько быстрее, чем find/file/awk один, который хорош, и на производных человечности модуль информации об изображении доступен от apt-get install libimage-info-perl –  rivimey 04.01.2014, 16:44
find . -name '*.png' -exec file "{}" \+ | awk -F"(: +PNG image data|,| x )" '$4 > 500 {print $4" "$1}'
0
27.01.2020, 20:04
  • 1
    не работает: 96, ./4/45445106_w185.png: 86, ./4/404358x_w185.png: 86, ./4/404341x_w185.png: 80, ./4/475986_w185.png: 621, ./4/481693_w185.png: 667, ./4/42513x_w185.png: 86, ./4/404372x_w185.png: –  steve-er-rino 25.10.2012, 21:58
  • 2
    @tink, бросок 7$ к интервалу перед сравнением, т.е. интервалом (7$)> 500.. в отсутствие кастинга awk обращение к литеральной строке, сравнивают –  iruvar 25.10.2012, 22:49
  • 3
    Steve, где делает это"", прибывают из? Мой "файл" не производит это. Но поскольку Chandra сказал: можно явно вынудить 7$ стать целым числом с помощью метода, на который указывают в его комментарии. –  tink 25.10.2012, 22:54
  • 4
    , Ваш awk оператор будет только работать, если имя файла не будет иметь никаких пробелов в нем –  h3rrmiller 25.10.2012, 23:04
  • 5
    @tink"", является частью того, что файл возвращает в моей среде. –  steve-er-rino 26.10.2012, 14:01
[115795] Также можно использовать [116136] для идентификации[116137] из ImageMagick:

или в OS X:

5
27.01.2020, 20:04

Это решение также будет работать. Последняя часть кода (mv "$img" ./lowpixel) переместит файлы меньше указанной ширины и высоты в папку. В следующем примере все изображения jpg размером менее 300x300 будут перемещены в папку с именем lowpixel:

find -iname \*. jpg | while read img; do anytopnm "$img" | pamfile | perl -ane 'exit 1 if $F[3]<300 || $F[5]<300' || mv "$img" ./lowpixel; done

0
27.01.2020, 20:04

Теги

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