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

11

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

Старейшина Гик
источник
Я не пробовал, но была статья об OMG! Ubuntu о приложении FSearch. Вы можете проверить это. omgubuntu.co.uk/2016/10/fsearch-fast-file-search-tool-linux
Джо-Эрленд Шинстад
@ Jo-ErlendSchinstad Спасибо за предложение, но поскольку я получаю свои результаты через CLI менее чем за 3 секунды, я удовлетворен этим подходом. Я посмотрю на это все же. :-)
Старейшина Гик
Но если вы не понимаете команду, вы забудете ее. И если бы вы понимали команды, то вы бы не задавали вопрос. Давайте улучшим Ubuntu, сделав вещи проще для тех, кто просто хочет сделать работу. Вы можете сделать это, добавив приложения или указав людей на приложения, которые уже есть.
Джо-Эрленд Шинстад
@ Jo-ErlendSchinstad Мне часто не хватает понимания, которое я получаю с помощью исследований и анализа. Я считаю, что этот подход имеет жизненно важное значение для развития. Процесс обнаружения привел меня к решению, которым я решил поделиться здесь, поскольку создал сценарий и поместил его в ~ / bin. Я вряд ли забуду и знаю, где искать, если я это сделаю. Поскольку это также и в моем ответе, любой, у кого есть мотивация, также может разобрать и понять это.
Старейшина Гик
Вы правы. Нам на самом деле не нужны рабочие столы. Мы можем сделать почти все, используя командные строки. Но если мы хотим расти, мы должны понимать, что большинство людей не хотят изучать такие вещи. Я знаю разработчиков, которые даже не могут описать различия между стеком и кучей.
Джо-Эрленд Шинстад

Ответы:

14

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

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
Rinzwind
источник
Какой «раздел ФАЙЛОВ, ниже»
Старейшина Гик
добавлен! это было спрятано в man-странице: D
Rinzwind
Это странно, я ожидал бы, что локализация будет быстрее, но с вашей командой locate я получаю время: реальные 0m8.985s, а с моей командой find я получаю время: реальные 0m2.595s
Elder Geek
1
Ох ... найти делает все файлы. Ваша находка оттуда, где вы находитесь, не так ли?
Rinzwind
Я добавил параметр -e, который не оказал большого влияния, но возвращение результатов для файлов, которые уже были удалены, не показалось мне полезным. предоставленное системное время намного меньше для определения местоположения, но в реальном времени результаты - это все, что меня действительно волнует.
Старейшина Гик
5

Я полагаю, что это можно сделать как 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

/programming/7190565/unix-find-multiple-file-types

Старейшина Гик
источник
touch hello.mp4не создает видеофайл>: - D, и вы можете изменить его на, locateчтобы ускорить его.
Rinzwind
@Rinzwind Действительный пункт относительно touchОднако, так как это не было сделано в этой системе, это не очень уместно в этом случае. Что касается локации, мне нужно было бы запустить updatedbдо того, чтобы получить текущие данные, не так ли?
Старейшина Гик
Да, updatedb выполняется каждый день, поэтому, если вы предполагаете, что вам не нужно продержаться несколько часов (скорость, с которой он возвращает результаты, на порядок выше, чем при поиске: D)
Rinzwind
@Rinzwind Я бы хотел увидеть рабочий пример этого, используя locate.
Старейшина Гик
добавил местоположение.
Rinzwind