Как найти файлы изображений по содержанию

У меня есть список файлов, и мне нужно найти все файлы изображений из этого списка.

Например, если в моем списке указано следующее:

pidgin.tar.gz photo01.jpg picture01 screenshot.gif invoice.pdf 

Тогда я бы хотел только выбрать:

 photo01.jpg picture01 screenshot.gif 

Заметки:

  • Метод не должен зависеть от расширений файлов
  • Неясные форматы изображений для Photoshop и Gimp можно игнорировать. (Если feh не может показать это, это не изображение)

5 Solutions collect form web for “Как найти файлы изображений по содержанию”

Следующая команда перечисляет строки в list_file которые содержат имя файла изображения:

 <list_file xargs -d \\n file -i | sed -n 's!: *image/[^ :]*$!!p' 
  • file -i FOO просматривает первые несколько байтов FOO для определения своего формата и печатает строку, такую ​​как FOO: image/jpeg ( -i означает показать тип MIME, он специфичен для GNU-файла, как это было найдено в Linux).
  • xargs -d \\n считывает список файлов (по одной строке) со стандартного ввода и применяет к нему последующую команду. (Для этого требуются GNU xargs, найденные в Linux, а в других системах оставьте -d \\n , но тогда список файлов не может содержать \'" или пробел).
  • Команда sed отфильтровывает суффикс : image/FOO чтобы просто отображать имена файлов. Он игнорирует строки, которые не соответствуют файлам изображений.
 file -ib image | awk '"^image/" {print}' 

Если файл обнаруживает изображение, он должен печатать строку следующим образом:

 image/jpeg; charset=binary 

Он работает на магические числа, поэтому он не основан на расширениях. Это

В дополнение к команде file вы также можете использовать ImageMagick. Ниже будет показан тип всех файлов в текущем каталоге:

 find -type f -depth 0 -print0 | xargs -0 identify 

Команда identify выведет что-то вроде этого для разных типов файлов:

 text.txt[8] TXT 612x792 612x792+0+0 16-bit DirectClass 694B 0.320u 0:00.330 php.jpg[31] JPEG 1280x1024 1280x1024+0+0 8-bit DirectClass 195KB 0.000u 0:00.000 

Анимированные GIF-файлы будут печатать больше информации (это 21-кадровый GIF):

 adhd.gif[0] GIF 211x200 211x200+0+0 8-bit PseudoClass 256c 233KB 0.000u 0:00.029 adhd.gif[1] GIF 168x130 211x200+22+22 8-bit PseudoClass 256c 233KB 0.000u 0:00.029 adhd.gif[2] GIF 168x130 211x200+22+22 8-bit PseudoClass 256c 233KB 0.000u 0:00.029 ... adhd.gif[18] GIF 168x130 211x200+22+22 8-bit PseudoClass 256c 233KB 0.000u 0:00.000 adhd.gif[19] GIF 168x130 211x200+22+22 8-bit PseudoClass 256c 233KB 0.000u 0:00.000 adhd.gif[20] GIF 168x130 211x200+22+22 8-bit PseudoClass 256c 233KB 0.000u 0:00.000 

Затем вы можете использовать awk или аналогичные инструменты, чтобы решить, что с ними делать.

Если у вас есть Python и python-magic . Например

 #!/usr/bin/env python import magic import os path=sys.argv[1] mime = magic.open(magic.MAGIC_NONE) mime.load() for r,d,f in os.walk(path): for files in f: filename=os.path.join(r,files) filetype=mime.file(filename) if "image" in filetype: print "File: %s is %s" %(filename, filetype) 

Возможно, что-то мне не хватает, но, похоже, это работает для меня:

 file -i * | grep "image/" | cut -d: -f1 
Interesting Posts

Сомнение о mmap

Как создать каталоги, содержащие index.html с помощью wget -recursive?

Как я могу направить цветное дерево на меньшее или большее?

Как процессы конечного пользователя, среда рабочего стола и менеджер окон взаимодействуют друг с другом?

Как сделать резервную копию через rsync на удаленном компьютере, сохраняя разрешения и права собственности?

Установка python дает ошибку dpkg

Что означают \ t и \ a в сценарии оболочки?

Как установить Ubuntu в нетбук, но сохраняя первоначальную установку win7 в хранилище

Удалить поля, содержащие определенную строку

Xargs с несколькими записями аргументов – используйте аргумент переменной окружения после sh -c '…'

Нужно ли мне перекрестно скомпилировать мою программу, когда моя цель – 64-битная арка. и хост – 32-битная арка от семейства x86?

Скажите SSH, чтобы использовать графическое приглашение для ключевой фразы

Заставить LibreOffice использовать интеграцию Kde?

Kali на RPI, не может обновить Kernel и установить текущие заголовки или найти старые заголовки для сборки

Что такое resume = используется в моих настройках загрузки grub?

Linux и Unix - лучшая ОС в мире.