Я хочу получить список всех файлов в папке проекта [рекурсивно], которые являются файлами изображений. Google Unfortunately не мог помочь мне здесь.
Если возможно, использование mimetypes существующей системы предпочтено, например, все файлы, которые имеют пантомиму, соответствующую шарику image/*
; так, чтобы любой пример мог быть легко расширен для video/*
, и т.д.
Кроме того, команды, которые не должны делать дорогих операций на каждом файле во всем каталоге, предпочтены, поскольку я мог бы пытаться использовать это на некоторых довольно огромных объемах.
Примечание: Потенциальная работа вокруг я рассмотрел, выбирает список расширений файла от mimetypes данных и делает a find
для этих расширений это однако менее предпочтено из-за расширений файла конечных файлов, которых я желаю определить местоположение, может отсутствовать, дважды загруженный, и т.д.
Править: @KasiyA указал на иллюстрирование потока, ищущее файлы следовательно, которые я считаю довольно тривиальными и не точно, что я ищу; я отредактировал заголовок, чтобы отразить, что я ищу именно базирующиеся результаты mimetype.
Это могло бы быть близко:
find . -type f -exec mimetype {} + | awk -F': +' '{ if ($2 ~ /^image\//) print $1 }'
regex быть согласованным в awk выражении может быть легко расширен.
Я не хорош в сценариях, но все еще это может найти все файлы рекурсивно и отобразить их, которые имеют тип изображения с помощью mimetype файлов.
find . -print0 | while IFS= read -r -d'' f; do
file -ib $f | grep "^image/" && echo $f;
done
Принятие Вас находится на 14,04 (использующий python3), маленький сценарий ниже перечисляет Ваши файлы рекурсивно в данном каталоге. Это определяет mimetype файла file
команда, как описано здесь
file --mime-type -b filename
дополнительно, можно расширить сценарий путем добавления команды при помощи shutil
(например. .move / .copy
) на том же уровне как print
команда.
Добавление mimetypes
Для объединенного поиска можно добавить (или удалить), mimetypes для поиска, путем добавления их к filetypes
- кортеж.
Сценарий
#!/usr/bin/env python3
import os
import subprocess
source_dir = "/path/to/directory"
filetypes = ("image", "video")
for root, dirs, files in os.walk(source_dir):
for name in files:
file = root+"/"+name
ftype = subprocess.check_output(['file', '--mime-type', '-b', file]).decode('utf-8').strip()
if ftype.split("/")[0] in filetypes:
print(file)
Как использовать его
Скопируйте сценарий в пустой файл, установите каталог для списка (sourcedir
) и mimtype (s) для поиска (filetypes
), сохраните его как list_files.py
и выполненный это командой:
python3 /path/to/list_files.py