web-dev-qa-db-fra.com

Comment trouver tous les fichiers vidéo sur mon système?

J'ai essayé d'utiliser le fichier d'objectif Unity pour rechercher *.* et filtrer par Last Modified = All, Type = Videos et Size = All mais rien trouvé, bien que je sache qu'il existe des fichiers .3gp dans mon dossier Images. Je sais que j'ai également de nombreux fichiers vidéo sur un autre lecteur monté sur le système de fichiers. J'ai compilé un liste des extensions probables et j'ai essayé de nombreuses itérations de la commande find en les utilisant avec find ./ -name "* .ext" -o (etc, etc, ad nauseum) sans aucune chance. . Quelle est la solution?

9
Elder Geek

Alternative: recherche sur fichier :

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

ou si vous voulez seulement les noms de fichiers ...

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

-N, --no-pad: Ne pas tamponner les noms de fichiers

-i, --mime: force la commande file à générer des chaînes de type mime plutôt que des chaînes plus classiques lisibles par l'homme. Ainsi, il peut dire 'text/plain; charset = us-ascii 'plutôt que' texte ASCII '. Pour que cette option fonctionne, le fichier change la façon dont il traite les fichiers reconnus par la commande elle-même (comme de nombreux types de fichiers texte, les répertoires, etc.) et utilise un fichier alternatif 'magique'. (Voir la section FILES ci-dessous).


La section FILES pointe vers:

Fichiers

/usr/share/misc/magic.mgc Liste de magie compilée par défaut.

/usr/share/misc/magic Répertoire contenant les fichiers magiques par défaut.


file est lentewwwwwwwwwwwwwwww cependant (il ouvrira tous les fichiers trouvés) mais a l’avantage de ne pas avoir besoin d’ajouter toutes ces extensions.


En utilisant localiser:

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
13
Rinzwind

J'imagine que cela pourrait être fait en 1 ligne mais cela semblait un peu lourd, j'ai donc créé un script pour faciliter le lancement et l'édition et je l'ai appelé findvids.sh C'est ce qui a fonctionné pour moi.

Remarque: je n’ai peut-être pas couvert TOUS les types de fichiers vidéo, mais je suis certain d’en avoir la plupart. .Mkv constitue une exception notable, car il s’agit du format cible du projet et je n’ai pas besoin de rechercher les fichiers déjà traités. Il devrait être très simple d’ajouter des formats (extensions) supplémentaires au script en fonction de vos besoins en examinant le modèle et en l’ajustant en conséquence, tout en conservant les guillemets au début et à la fin de l’expression. Notez que les fichiers que vous n’avez pas l’autorisation de lire ne seront pas trouvés.

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

Editer à partir d'un commentaire: Le $ à la fin de l'extension signifie que le terme recherché doit être trouvé à la fin de la ligne. si nous voulions faire correspondre le début de la ligne, nous utiliserions plutôt ^ avant le terme recherché. Vous pouvez trouver ces ancres expliquées plus en détail ici.

J'ai comparé la vitesse à l'aide de Locate et les résultats sont les suivants:

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

De façon inattendue, trouver est plus rapide. Je vais utiliser cette approche.

Edit: des tests supplémentaires indiquent que la localisation a été plus rapide sur une autre machine. Je pense que les résultats de mes tests de vitesse initiaux étaient superflus à cause de la mise en cache.

Sources:

man find

man grep

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

4
Elder Geek