Как я могу найти все видео файлы в моей системе?

Я попытался использовать поиск файла объектива Unity для *.* и фильтрация по Last Modified=All, Type=Videos и Size=All, но ничего не нашла, хотя я знаю, что в моей папке Pictures есть файлы.3gp. Я знаю, что у меня есть множество видеофайлов на другом диске, также смонтированном в файловой системе. Я составил список возможных расширений и попробовал множество итераций find команда, использующая их с find ./ -name "*.ext" -o (и т. д. и т. д., nauseum) без всякой удачи. Каково решение?

4 ответа

Решение

Альтернатива: поиск по файлу:

sudo find . -type f -exec file -N -i -- {} + | grep video

или если вы хотите только имена файлов...

sudo find . -type f -exec file -N -i -- {} + | sed -n 's!: video/[^:]*$!!p'

-N, --no-pad: Не дополняйте имена файлов

-i, --mime: Заставляет команду file выводить строки типа mime, а не более традиционные для человека. Таким образом, он может сказать "текст / обычный; charset=us-ascii', а не'ASCII text'. Чтобы эта опция работала, файл изменяет способ обработки файлов, распознаваемых самой командой (например, многих типов текстовых файлов, каталогов и т. Д.), И использует альтернативный "магический" файл. (См. Раздел "ФАЙЛЫ" ниже).


Раздел ФАЙЛЫ указывает на:

файлы

/usr/share/misc/magic.mgc По умолчанию составлен список магии.

/usr/share/misc/magic Каталог, содержащий магические файлы по умолчанию.


file хотя и медленный, но откроет все найденные файлы, но имеет то преимущество, что вам не нужно добавлять все эти расширения.


Используя locate:

locate *.mkv *.webm *.flv *.vob *.ogg *.ogv *.drc *gifv *.mng *.avi$ *.mov *.qt *.wmv *.yuv *.rm *.rmvb *.asf *.amv *.mp4$ *.m4v *.mp *.m?v *.svi *.3gp *.flv *.f4v

Я полагаю, что это можно сделать как 1-строчный, но это казалось немного громоздким, поэтому я создал скрипт для простоты запуска и редактирования и назвал его findvids.sh Это то, что сработало для меня.

Примечание. Возможно, я не охватил ВСЕ типы видеофайлов, но уверен, что большинство из них у меня есть. Одним заметным исключением является.mkv, так как это целевой формат для проекта, и мне не нужно находить файлы, которые уже были обработаны. Должно быть очень просто добавить дополнительные форматы (расширения) в сценарий в соответствии с вашими потребностями, изучив шаблон и изменив его соответствующим образом, сохранив кавычки в начале и конце выражения. Обратите внимание, что файлы, у которых нет разрешения на чтение, не будут найдены.

#!/bin/bash
#This script is intended to find virtually all video file formats.
find /. -type f | grep -E "\.webm$|\.flv$|\.vob$|\.ogg$|\.ogv$|\.drc$|\.gifv$|\.mng$|\.avi$|\.mov$|\.qt$|\.wmv$|\.yuv$|\.rm$|\.rmvb$|/.asf$|\.amv$|\.mp4$|\.m4v$|\.mp*$|\.m?v$|\.svi$|\.3gp$|\.flv$|\.f4v$"

Редактировать на основе комментария: $ в конце расширения означает, что поисковый термин должен быть найден в конце строки. если бы мы хотели соответствовать началу строки, вместо этого мы бы использовали ^ раньше срока мы намерены соответствовать. Вы можете найти эти якоря, объясненные более подробно здесь.

Я сделал сравнение скорости с использованием locate, и результаты были:

time locate *.mkv *.webm *.flv *.vob *.ogg *.ogv *.drc *gifv *.mng *.avi *.mov *.qt *.wmv *.yuv *.rm *.rmvb *.asf *.amv *.mp4$ *.m4v *.mp *.m?v *.svi *.3gp *.flv *.f4v

real    0m8.887s
user    0m5.814s
sys 0m0.052s

против

time find /. -type f | grep -E "\.webm$|\.flv$|\.vob$|\.ogg$|\.ogv$|\.drc$|\.gifv$|\.mng$|\.avi$|\.mov$|\.qt$|\.wmv$|\.yuv$|\.rm$|\.rmvb$|/.asf$|\.amv$|\.mp4$|\.m4v$|\.mp4$|\.m?v$|\.svi$|\.3gp$|\.flv$|\.f4v$"

real    0m2.795s
user    0m0.657s
sys 0m1.115s

Неожиданно найти быстрее. Я буду использовать этот подход.

Изменить: дальнейшее тестирование показывает, что поиск был быстрее на другом компьютере. Я думаю, что мои начальные результаты теста скорости были ложными из-за кеширования.

Источники:

man find

man grep

https://stackoverflow.com/questions/7190565/unix-find-multiple-file-types

В findв ответе старшего компьютерщика меня уловила чувствительность к регистру. Мои устройства, похоже, довольно часто использовали заглавные буквы при съемке видео и т. Д. Просто нужно добавить -i вариант grep, чтобы исправить это:

find /. -type f | grep -iE "\.webm$|\.flv$|\.vob$|\.ogg$|\.ogv$|\.drc$|\.gifv$|\.mng$|\.avi$|\.mov$|\.qt$|\.wmv$|\.yuv$|\.rm$|\.rmvb$|/.asf$|\.amv$|\.mp4$|\.m4v$|\.mp*$|\.m?v$|\.svi$|\.3gp$|\.flv$|\.f4v$"

Вот надежный и простой ответ, состоящий из find, fileа также grep:

      find . -type f |
  file --mime-type --no-pad --files-from - |
  grep --fixed-strings ': image/'

Обратите внимание, что это не будет работать для пути, который содержит : image/.

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