Следующие списки команд строки в 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
Это работает над магическими числами, таким образом, это не основано на расширениях. Это
| grep 'image'
. Кроме того, различные версии file
(например, на различных типах Unix), может не возвратить тип MIME, таким образом, image/
является неправильным, и имя файла на первом месте так ^
является также несоответствующим.
– Neil Mayhew
13.09.2010, 00:35
-i
который просит печатать тип MIME - я предполагаю, что другие возвратят ошибку [я не думаю, что существует легкопереносимый путь]. С имени файла - отмечают -b
флаг, который отключает печать файла (Вы не имеете, проверяет команду, которую я отправил, не так ли?).
– Maciej Piechotka
13.09.2010, 00:52
Netboot image
или 4 images/screen
), что делает Вы предлагаете, чтобы это было лучше, чем установка a file
это печатает, может имитировать типы?
– Gilles 'SO- stop being evil'
13.09.2010, 02:17
-i
и не удался заметить, что @Maciej использовал его. Я вижу это file
поддержки -i
на Mac OS так вероятно, это поддерживается на BSDs, также.
– Neil Mayhew
13.09.2010, 03:03
В дополнение к 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 распечатают больше информации (это - GIF с 21 кадром):
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. Например,
#!/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
for f in files; do file -ib $file | grep '"^image/" && echo $file; done
– Maciej Piechotka 13.09.2010, 01:26image/FOO
(FOO
не позволяется содержать a:
). Таким образом, это не проблема, если имена файлов содержатimage/
. – Gilles 'SO- stop being evil' 13.09.2010, 02:12find . -type f | xargs -L1 file --mime-type |sed -n 's#: *image/[^ :]*$##p'
для получения файлов изображений в dir – adrianlzt 27.11.2015, 11:55