Найти изображения выше определенного разрешения в каталоге Linux

Это дополнительный вопрос из моего предыдущего вопроса, заданного здесь . Мне нужно найти и записать путь ко всем jpeg изображениям в подкаталогах с разрешением, превышающим определенное число (например, более 800 по ширине).

Ну, есть миллионы изображений, и мне интересно, почему процесс find ниже так медленен. Поэтому мне нужно оптимизировать скрипт bash, чтобы сделать его быстрее:

find -type f -regex "^.*\.\(png\|jpg\|jpeg\)$" -exec identify -format "%d/%f, %w, %h\n" {} \; | awk -F ',' '$2 > 800 && $3 > 600'

Но есть одна интересная особенность: у меня есть 4 основных каталога (от 1 до 4), каждый из которых содержит 256 подкаталогов. Каждый из этих подкаталогов имеет около 5000 подкаталогов, каждый из которых имеет около 10 изображений. Так выглядит major_dir/subdir/subsubdir/10.jpg. Интересной особенностью является то, что все изображения в этих подкаталогах имеют одинаковое разрешение; поэтому мне не нужно обрабатывать все эти 10 изображений. Если разрешение одного из них удовлетворяет, то мне просто нужно зарегистрировать один путь (путь к подкаталогу). С этим, я надеюсь, я получу в 10 раз большую скорость. Кроме того, все мои изображения .jpg, если это тоже помогает.

Как я могу сделать это в скрипте bash? Таким образом, идеальный результат будет выглядеть следующим образом (path, width_of_images_there, height)

/path/to/sub_dir1, 1600, 1200
/path/to/sub_dir2, 1600, 1200
/path/to/sub_dir3, 3200, 2400
/path/to/sub_dir4, 1000, 800
3
задан 26 June 2018 в 00:04

1 ответ

Как насчет этого:

find /path/to/dir_with_major_dirs -path "*/*/*/*.jpg" -type f -exec bash -c '
  for i; do
    [[ "$p" = "${i%/*}" ]] || identify -format "%d, %w, %h\n" "$i"
    p="${i%/*}"
  done' _ {} + |
awk -F ',' '$2 > 800 && $3 > 600'

Этот тест для каждого файла jpg обнаружил, совпадает ли его путь с путем предыдущего файла и только если он не запущен identify. Выходные данные передаются в awk, как вы уже поняли, я просто удалил /%f из команды identify, чтобы избавиться от ненужного имени файла.

2
ответ дан 26 June 2018 в 00:04

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

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