¿Cómo buscar archivos de video en Ubuntu?

12

Había descargado un video hace unos meses. No recuerdo muy bien el nombre con el que se guarda. ¿Hay algún comando o método que solo muestre archivos de video para que pueda buscar mi video allí? Desde las páginas de manual, no pude encontrar ninguna opción de encontrar haciendo ese trabajo.

El archivo de video que descargué puede tener cualquier extensión (como webm, etc.) y también es posible que haya cambiado el nombre a algo como 'abcde' que no recuerdo ahora. ¡Entonces la búsqueda no puede basarse en el nombre del archivo!

(Solo mencionando una similitud: en Perl hay comandos para verificar si un archivo es un archivo de texto o binario, etc. Del mismo modo, puede haber una manera de verificar si es un archivo de video o multimedia)

Ravi
fuente

Respuestas:

14

La idea básica es utilizar la utilidad de archivo para determinar el tipo de cada archivo y filtrar los archivos de video.

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

Esto imprime los nombres de todos los archivos /some/directoryy sus subdirectorios de forma recursiva cuyo tipo MIME es un tipo de video.

El filecomando necesita abrir todos los archivos, lo que puede ser lento. Para acelerar las cosas:

  • Restrinja el comando a los árboles de directorio donde es probable que se encuentre, como por ejemplo /tmp, /var/tmpy a su directorio de inicio.
  • Restrinja la búsqueda a archivos cuyo tamaño se encuentre en el estadio correcto, digamos al menos 10 MB.
  • Restrinja la búsqueda a archivos cuya hora de modificación se encuentre en el estadio correcto. Tenga en cuenta que la descarga del archivo puede haber configurado su tiempo de modificación en el momento de la descarga o haber conservado el tiempo, dependiendo del programa que utilizó para descargar (y con qué configuraciones). También puede filtrar el tiempo de cambio de inodo (ctime), que es la hora en que el archivo se modificó o movió por última vez (creado, renombrado, etc.) de cualquier manera.

Aquí hay un ejemplo que restringe el tiempo de modificación para que sea al menos hace 60 días y el tiempo c para que no sea hace más de 100 días.

find /tmp /var/tmp ~ -type f -size +10M \
     -mtime +60 -ctime -100 \
     -exec file -N -i -- {} + |
sed -n 's!: video/[^:]*$!!p'
Gilles 'SO- deja de ser malvado'
fuente
Su primer comando obtiene muchos otros archivos (que no sean de video). Por ejemplo, una línea de salida es: /home/ravbholua/Downloads/Music_Command_line/[SOLVED] a code question regarding music file extensions_files/avatar774785_6.gif: image/jpeg; charset=binary Otra línea de salida es: /home/ravbholua/Free Computer Networking Books Download | Ebooks Online Textbooks.html: text/html; charset=iso-8859-1 solo necesito archivos de video que se ejecutarán en vlc player, etc.
Ravi
@Ravi Accidentalmente omití la opción de sedexcluir líneas que no coinciden (y también la opción filede no romper líneas en el lugar equivocado), vea mi edición.
Gilles 'SO- deja de ser malvado'
Sí Gilles, eso es lo que quería. ¡Eso ha funcionado magníficamente! Después de ejecutar su comando, he llegado a saber que mi sistema tiene muchos videos (algunos completos y otros incompletos) que no conocía. Gracias.
Ravi
1
Esta es la solución ideal si sus archivos de video no tienen extensiones predecibles. Recurrir a filees la única opción.
miguelg
13

Buscando por nombre de archivo

Como Chris mencionó en su respuesta, puede usarlo findpara hacer esto, pero me resulta mucho más rápido buscar en la locatebase de datos.

Suponiendo que su distribución proporciona esta instalación, la mayoría de los grandes lo hacen, Ubuntu, Fedora, CentOS, etc.

Ejemplo

$ locate --basename .mp4 .mkv .wmv .flv .webm .mov .avi | head -5
/home/saml/Desktop/sample_mpeg4.mp4
/home/saml/Downloads/Karrolls_Christmas/Karroll's Christmas (2004) part 1.mp4
/home/saml/Downloads/Karrolls_Christmas/Karroll's Christmas (2004) part 10.mp4
/home/saml/Downloads/Karrolls_Christmas/Karroll's Christmas (2004) part 2.mp4
/home/saml/Downloads/Karrolls_Christmas/Karroll's Christmas (2004) part 3.mp4

Búsqueda por tipo de archivo

Para buscar los archivos por tipo, puede usar el comando filepara obtener una lista de información sobre el tipo de un archivo en particular.

Aquí hay una lista aproximada de estos tipos de archivos de mi sistema, Fedora 19.

  • .mp4: Medios ISO, sistema MPEG v4, versión 1
  • .mkv: archivo EBML, creador matroska
  • .wmv: Microsoft ASF
  • .flv: Video de Macromedia Flash
  • .webm: WebM
  • .mov: Medios ISO, película Apple QuickTime
  • .avi: AVI

Puede usar este comando para buscar todos los archivos en su /home/<user>directorio.

$ find /home/<user> -type f -exec file {} + | \
    grep -E "MPEG v4|EBML|\
      Microsoft ASF|Macromedia Flash Video|WebM|Apple QuickTime movie|AVI"

Alternativamente, puede usar filey buscar por tipos MIME que están categorizados como "video".

 -i, --mime
         Causes the file command to output mime type strings rather than 
         the more traditional human readable ones.  Thus it may say 
         ‘text/plain; charset=us-ascii’ rather than “ASCII text”.

Adaptando lo que hemos hecho arriba a algo como esto:

$ find /home/<user> -type f -exec file -i {} + | grep video

Puede usar sedpara obtener solo los nombres de archivo:

$ find /home/<user> -type f -exec file -i {} + |
    sed -n '/video/s/:[^:]\+$//p'
slm
fuente
+1, esto también, por supuesto, no solo supone que locateestá instalado, sino que la base de datos está construida.
Chris Down
Sí, también la base de datos generalmente se construye todas las noches en la mayoría de las distribuciones, por lo que los archivos agregados recientemente no estarán en la base de datos hasta que el trabajo nocturno se haya ejecutado y los haya agregado.
slm
1
Olvidaste uno de los más comunes avi,.
Faheem Mitha
6

Como ahora especifica que no puede basarse en la extensión, también puede leer detenidamente file(advertencia: esto podría llevar mucho tiempo):

find ~ -type f -exec file -i {} + | grep video 

Si podría haber buscado por nombre de archivo, suponiendo que tiene una extensión de video común y está en algún lugar de su directorio de inicio:

find ~ -type f -name '*.mkv' -o -name '*.mp4' -o -name '*.wmv' -o -name '*.flv' -o -name '*.webm' -o -name '*.mov'

También puedes usar una expresión regular:

find ~ -type f -regex '.*\.\(mkv\|mp4\|wmv\|flv\|webm\|mov\)'

Si tiene una buena idea acerca de cuándo lo descargó (y suponiendo que el mtime esté configurado en ese momento), también puede intentar reducirlo con la -mtimeopción de búsqueda de GNU .

Chris Down
fuente
1
También podría mostrar todos los archivos de mayor tamaño que un umbral (suponiendo que los archivos de video sean muy grandes) ...
ChuckCottrill
Chris Down, esa forma de usar el nombre de archivo no funcionará. He editado mi Q. Por favor, eche un vistazo
Ravi
@Ravi Vea mi respuesta actualizada, que usa tipos mime.
Chris Down
Su primer comando está obteniendo muchos otros archivos (además de video) incluso. Por ejemplo, una línea de la salida es: /home/ravbholua/Downloads/Music_Command_line/Any s_w to cut_add audio files, convert video to audio?_files/post_old.gif: image/gif; charset=binary Otra línea de la salida es: /home/ravbholua/Downloads/Music_Command_line/command line - how to start a video from the terminal? - Ask Ubuntu.html: text/html; charset=utf-8 No está resolviendo mi propósito.
Ravi