¿Cómo puedo encontrar todos los archivos de video en mi sistema?

11

Intenté usar la búsqueda *.*y el filtro de Unity Lens File para Last Modified = All, Type = Videos y Size = All, pero no encontré nada, aunque sé que hay algunos archivos .3gp en mi carpeta Imágenes. Sé que también tengo numerosos archivos de video en otra unidad montada en el sistema de archivos. Recopilé una lista de posibles extensiones y probé numerosas iteraciones del findcomando utilizándolas con find ./ -name "* .ext" -o (etc, etc, ad nauseum) sin suerte alguna. ¿Cuál es la solución?

Elder Geek
fuente
¡No lo he probado, pero había un artículo sobre OMG! Ubuntu sobre la aplicación FSearch. Es posible que desee verlo. omgubuntu.co.uk/2016/10/fsearch-fast-file-search-tool-linux
Jo-Erlend Schinstad
@ Jo-ErlendSchinstad Gracias por la sugerencia, pero como recibo mis resultados a través de la CLI en menos de 3 segundos, estoy satisfecho con este enfoque. Aunque lo miraré. :-)
Élder Geek
Pero a menos que comprenda el comando, lo olvidará. Y si entendieras los comandos, entonces no hubieras hecho la pregunta. Mejoremos Ubuntu haciendo las cosas más fáciles para aquellos que solo quieren hacer el trabajo. Puede hacerlo agregando aplicaciones o señalando personas a las aplicaciones que ya están allí.
Jo-Erlend Schinstad
@ Jo-ErlendSchinstad A menudo empiezo a faltar la comprensión que obtengo a través de la investigación y el análisis. Creo que este enfoque es vital para el desarrollo. El proceso de descubrimiento me llevó a una solución que elegí compartir aquí, ya que creé un script y lo coloqué en ~ / bin. Es poco probable que lo olvide y sepa dónde buscar si lo hago. Como también está en mi respuesta, cualquiera con la motivación puede analizarlo y comprenderlo también.
Élder Geek
Tienes razón. En realidad no necesitamos escritorios. Podemos hacer casi todo usando líneas de comando. Pero si queremos crecer, debemos darnos cuenta de que la mayoría de las personas no quieren aprender ese tipo de cosas. Conozco desarrolladores que ni siquiera pueden describir las diferencias entre la pila y el montón.
Jo-Erlend Schinstad

Respuestas:

14

Alternativa: buscar en el archivo :

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

o si solo quieres los nombres de archivo ...

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

-N, --no-pad: No rellene los nombres de archivo

-i, --mime: Hace que el comando de archivo genere cadenas de tipo mime en lugar de las más legibles por humanos. Por lo tanto, puede decir 'text / plain; charset = us-ascii 'en lugar de' texto ASCII '. Para que esta opción funcione, el archivo cambia la forma en que maneja los archivos reconocidos por el comando en sí (como muchos de los tipos de archivos de texto, directorios, etc.) y hace uso de un archivo 'mágico' alternativo. (Consulte la sección ARCHIVOS, a continuación).


La sección ARCHIVOS apunta a:

Archivos

/usr/share/misc/magic.mgc Lista compilada predeterminada de magia.

/usr/share/misc/magic Directorio que contiene archivos mágicos predeterminados.


file aunque es lentowwwwwwwwwwwwwwww (abrirá todos los archivos de hallazgos encontrados) pero tiene la ventaja de que no necesita agregar todas esas extensiones.


Usando localizar:

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
fuente
Qué sección de "ARCHIVOS, a continuación"
Elder Geek
¡adicional! estaba oculto en la página del manual: D
Rinzwind
Eso es extraño, hubiera esperado que localizar fuera más rápido, pero con su comando de localización obtengo tiempo: 0m8.985s reales y con mi comando find obtengo tiempo: 0m2.595s reales
Elder Geek
1
Oh ... localizar hace todos los archivos. Tu hallazgo es de donde estás ¿no?
Rinzwind
Agregué el modificador -e que no tuvo mucho impacto, pero devolver los resultados de los archivos que ya no están no parecía útil. El tiempo otorgado por el sistema es mucho menor para ubicarlo, pero el tiempo real de resultados es todo lo que realmente me importa
Élder Geek
5

Me imagino que esto se podría hacer como una línea, pero me pareció un poco engorroso, así que creé un script para facilitar su lanzamiento y edición y lo llamé findvids.shEsto es lo que funcionó para mí.

Nota: es posible que no haya cubierto TODOS los tipos de archivos de video, pero estoy seguro de que tengo la mayoría de ellos. Una excepción notable es .mkv, ya que es el formato de destino para el proyecto y no necesito encontrar los archivos que ya se han procesado. Debe ser muy simple agregar formatos adicionales (extensiones) al script para satisfacer sus necesidades examinando el patrón y ajustándolo en consecuencia mientras mantiene las comillas al principio y al final de la expresión. Tenga en cuenta que los archivos que no tiene permiso para leer no se encontrarán.

#!/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$"

Editar en base a un comentario: El $al final de la extensión significa que el término de búsqueda debe encontrar al final de la línea. si quisiéramos igualar el comienzo de la línea, usaríamos ^antes del término que pretendemos igualar. Puede encontrar estos anclajes explicados con más detalle aquí.

Hice una comparación de velocidad con el uso de localizar y los resultados fueron:

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

vs.

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

Inesperadamente, encontrar es más rápido. Usaré este enfoque.

Editar: más pruebas indican que localizar fue más rápido en una máquina diferente. Creo que los resultados iniciales de mi prueba de velocidad fueron falsos debido al almacenamiento en caché.

Fuentes:

man find

man grep

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

Elder Geek
fuente
touch hello.mp4no crea un archivo de video>: - D y es posible que desee cambiarlo locatepara acelerarlo.
Rinzwind
@Rinzwind Punto válido respecto a touchSin embargo, dado que eso no se ha hecho en este sistema, no es realmente relevante en este caso. En lo que respecta a localizar, tendría que ejecutar updatedbantes para tener datos actuales, ¿no?
Élder Geek
Sí, actualizadob se realiza todos los días, por lo que si puede suponer que no necesita durar unas pocas horas (la velocidad que devuelve los resultados es una magnitud mayor que con find: D)
Rinzwind
@Rinzwind Me encantaría ver un ejemplo funcional de esto usando localizar.
Élder Geek
agregado un localizar.
Rinzwind el