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

11

J'ai essayé d'utiliser la recherche *.*et le filtrage des fichiers d'objectif Unity par Last Modified = All, Type = Videos et Size = All, mais je n'ai rien trouvé bien que je sache qu'il y a 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é une liste d'extensions probables et j'ai essayé de nombreuses itérations de la findcommande en les utilisant avec find ./ -name "* .ext" -o (etc, etc, ad nauseum) sans aucune chance. Quelle est la solution?

Elder Geek
la source
Je ne l'ai pas essayé, mais il y avait un article sur OMG! Ubuntu à propos de l'application FSearch. Tu voudras peut-être vérifier. omgubuntu.co.uk/2016/10/fsearch-fast-file-search-tool-linux
Jo-Erlend Schinstad
@ Jo-ErlendSchinstad Merci pour la suggestion mais comme j'obtiens mes résultats via la CLI en moins de 3 secondes, je suis satisfait de cette approche. Je vais le regarder cependant. :-)
Elder Geek
Mais à moins que vous ne compreniez la commande, vous allez l'oublier. Et si vous aviez bien compris les commandes, vous n'auriez pas posé la question. Améliorons Ubuntu en facilitant les choses pour ceux qui veulent simplement faire le travail. Vous pouvez le faire en ajoutant des applications ou en pointant les gens vers des applications qui sont déjà là.
Jo-Erlend Schinstad
@ Jo-ErlendSchinstad Je commence souvent à manquer de compréhension que j'obtiens via la recherche et l'analyse. Je pense que cette approche est vitale pour le développement. Le processus de découverte m'a conduit à une solution que j'ai choisi de partager ici car j'ai créé un script et l'ai placé dans ~ / bin, je ne vais probablement pas oublier et savoir où chercher si je le fais. Comme c'est aussi dans ma réponse, toute personne motivée peut également l'analyser et la comprendre.
Elder Geek
Tu as raison. Nous n'avons pas vraiment besoin d'ordinateurs de bureau. Nous pouvons presque tout faire en utilisant des lignes de commande. Mais si nous voulons grandir, nous devons réaliser que la plupart des gens ne veulent pas apprendre ce genre de chose. Je connais des développeurs qui ne peuvent même pas décrire les différences entre la pile et le tas.
Jo-Erlend Schinstad du

Réponses:

14

Alternative: recherche dans le dossier :

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

ou si vous ne voulez que les noms de fichiers ...

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

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

-i, --mime: Force la commande file à afficher des chaînes de type mime plutôt que les chaînes lisibles par l'homme plus traditionnelles. Ainsi, il peut indiquer «text / plain; charset = us-ascii 'plutôt que' ASCII text '. Pour que cette option fonctionne, le fichier change la façon dont il gère les fichiers reconnus par la commande elle-même (tels que de nombreux types de fichiers texte, répertoires, etc.) et utilise un autre fichier «magique». (Voir la section FICHIERS ci-dessous).


La section FICHIERS pointe vers:

Des dossiers

/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 lentwwwwwwwwwwwwwwww cependant (il ouvrira tous les fichiers trouvés) mais a l'avantage que vous n'avez pas besoin d'ajouter toutes ces extensions.


Utilisation de la localisation:

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
la source
Quelle "section FICHIERS, ci-dessous"
Elder Geek
ajoutée! il était caché dans la page de manuel: D
Rinzwind
C'est étrange, je m'attendais à ce que la localisation soit plus rapide, mais avec votre commande de localisation, j'obtiens le temps: 0m8.985s réel et avec ma commande find, j'obtiens le temps: 0m2.595s réel
Elder Geek
1
Oh ... localiser tous les fichiers. Votre trouvaille vient d'où vous êtes n'est-ce pas?
Rinzwind
J'ai ajouté le commutateur -e qui n'a pas eu beaucoup d'impact, mais le retour des résultats pour les fichiers déjà disparus ne m'a pas semblé utile. le temps système accordé est beaucoup plus faible pour la localisation, mais le temps réel pour les résultats est tout ce qui m'importe vraiment.
Elder Geek
5

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.shC'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 sûr que j'en ai la plupart. Une exception notable est .mkv car c'est le format cible pour le projet et je n'ai pas besoin de trouver les fichiers qui ont déjà été traités. Il devrait être très simple d'ajouter des formats supplémentaires (extensions) au script en fonction de vos besoins en examinant le modèle et en 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'êtes pas autorisé à 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$"

Modifier en fonction du commentaire: le $à la fin de l'extension signifie que le terme de recherche doit être trouvé à la fin de la ligne. si nous voulions faire correspondre le début de la ligne à la place, nous utiliserions ^avant le terme que nous avons l'intention de faire correspondre. Vous pouvez trouver ces ancres expliquées plus en détail ici.

J'ai fait une comparaison de vitesse à l'aide de l'outil de localisation 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

contre.

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, la recherche 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 mes résultats de test de vitesse initiaux étaient superposés en raison de la mise en cache.

Sources:

man find

man grep

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

Elder Geek
la source
touch hello.mp4ne crée pas de fichier vidéo>: - D et vous voudrez peut-être le changer locatepour l'accélérer.
Rinzwind
@Rinzwind Point valable concernant touchCependant, comme cela n'a pas été fait sur ce système, ce n'est pas vraiment pertinent dans ce cas. En ce qui concerne la localisation, je devrais alors exécuter updatedbavant pour avoir les données actuelles, n'est-ce pas?
Elder Geek
Oui, la mise à jour est effectuée tous les jours, donc si vous pouvez supposer que vous n'avez pas besoin de durer quelques heures (la vitesse à laquelle elle renvoie les résultats est d'une amplitude supérieure à celle de find: D)
Rinzwind
@Rinzwind Je serais ravi de voir un exemple de travail en utilisant Locate.
Elder Geek
ajouté une localisation.
Rinzwind