Найдите файлы, соответствующие mimetype в каталоге рекурсивно через командную строку

Я хочу получить список всех файлов в папке проекта [рекурсивно], которые являются файлами изображений. Google Unfortunately не мог помочь мне здесь.

Если возможно, использование mimetypes существующей системы предпочтено, например, все файлы, которые имеют пантомиму, соответствующую шарику image/*; так, чтобы любой пример мог быть легко расширен для video/*, и т.д.

Кроме того, команды, которые не должны делать дорогих операций на каждом файле во всем каталоге, предпочтены, поскольку я мог бы пытаться использовать это на некоторых довольно огромных объемах.


Примечание: Потенциальная работа вокруг я рассмотрел, выбирает список расширений файла от mimetypes данных и делает a find для этих расширений это однако менее предпочтено из-за расширений файла конечных файлов, которых я желаю определить местоположение, может отсутствовать, дважды загруженный, и т.д.


Править: @KasiyA указал на иллюстрирование потока, ищущее файлы следовательно, которые я считаю довольно тривиальными и не точно, что я ищу; я отредактировал заголовок, чтобы отразить, что я ищу именно базирующиеся результаты mimetype.

2
задан 10 September 2014 в 22:57

3 ответа

Это могло бы быть близко:

find . -type f -exec mimetype {} + | awk -F': +' '{ if ($2 ~ /^image\//) print $1 }'

regex быть согласованным в awk выражении может быть легко расширен.

1
ответ дан 7 October 2019 в 03:03

Я не хорош в сценариях, но все еще это может найти все файлы рекурсивно и отобразить их, которые имеют тип изображения с помощью mimetype файлов.

 find . -print0 | while IFS= read -r -d'' f; do 
    file -ib $f | grep "^image/" && echo $f; 
 done
1
ответ дан 7 October 2019 в 03:03

Принятие Вас находится на 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
2
ответ дан 7 October 2019 в 03:03

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

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