Comment rechercher des fichiers vidéo sur Ubuntu?

12

J'avais téléchargé une vidéo il y a quelques mois. Je ne me souviens pas très bien du nom sous lequel il est enregistré. Existe-t-il une commande ou une méthode qui ne produira que des fichiers vidéo afin que je puisse y rechercher ma vidéo? À partir des pages de manuel, je n'ai trouvé aucune option pour trouver ce travail.

Le fichier vidéo que j'ai téléchargé peut avoir n'importe quelle extension (comme webm, etc.) et il est également possible que j'ai eu ce temps-là changé le nom en quelque chose comme 'abcde' dont je ne me souviens pas maintenant. La recherche ne peut donc pas être basée sur le nom du fichier!

(Il suffit de mentionner une similitude: en perl, il existe des commandes pour vérifier si un fichier est un fichier texte ou binaire, etc. De même, il peut y avoir un moyen de vérifier si son fichier vidéo ou son fichier multimédia)

Ravi
la source

Réponses:

14

L'idée de base est d'utiliser l' utilitaire de fichiers pour déterminer le type de chaque fichier et filtrer les fichiers vidéo.

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

Cela affiche les noms de tous les fichiers dans /some/directoryet ses sous-répertoires récursivement dont le type MIME est un type vidéo.

La filecommande doit ouvrir chaque fichier, ce qui peut être lent. Pour accélérer les choses:

  • Limitez la commande aux arborescences de répertoires où elle est susceptible de se trouver, telles que /tmp, /var/tmpet à votre répertoire personnel.
  • Limitez la recherche aux fichiers dont la taille est dans le bon stade, par exemple au moins 10 Mo.
  • Limitez la recherche aux fichiers dont l'heure de modification est dans le bon stade. Notez que le téléchargement du fichier peut avoir défini son heure de modification à l'heure du téléchargement ou conservé l'heure, selon le programme que vous avez utilisé pour télécharger (et avec quels paramètres). Vous pouvez également filtrer le temps de changement d'inode (ctime), qui est l'heure de la dernière modification ou déplacement du fichier (créé, renommé, etc.) de quelque manière que ce soit.

Voici un exemple qui contraint le délai de modification à au moins 60 jours et le délai à 100 jours au maximum.

find /tmp /var/tmp ~ -type f -size +10M \
     -mtime +60 -ctime -100 \
     -exec file -N -i -- {} + |
sed -n 's!: video/[^:]*$!!p'
Gilles 'SO- arrête d'être méchant'
la source
Votre 1ère commande récupère de nombreux autres fichiers (autres que vidéo). Par exemple, une ligne de sortie est: /home/ravbholua/Downloads/Music_Command_line/[SOLVED] a code question regarding music file extensions_files/avatar774785_6.gif: image/jpeg; charset=binary Une autre ligne de sortie est: /home/ravbholua/Free Computer Networking Books Download | Ebooks Online Textbooks.html: text/html; charset=iso-8859-1 je n'ai besoin que de fichiers vidéo qui s'exécuteront dans le lecteur vlc, etc.
Ravi
@Ravi J'avais accidentellement laissé de côté l'option d' sedexclure les lignes non correspondantes (et aussi l'option filede ne pas couper les lignes au mauvais endroit), voir ma modification.
Gilles 'SO- arrête d'être méchant'
Oui Gilles, c'est ce que je voulais. Cela a parfaitement fonctionné! Après avoir exécuté votre commande, j'ai appris que mon système contient de nombreuses vidéos (certaines complètes et d'autres incomplètes) dont je n'étais pas au courant. Je vous remercie.
Ravi
1
C'est la solution idéale si vos fichiers vidéo n'ont pas d'extensions prévisibles. Le recours à fileest la seule option.
miguelg
13

Recherche par nom de fichier

Comme Chris l'a mentionné dans sa réponse, vous pouvez le findfaire, mais je trouve qu'il est beaucoup plus rapide de rechercher dans la locatebase de données.

En supposant que votre distribution fournit cette fonctionnalité, la plupart des grandes font, Ubuntu, Fedora, CentOS, etc.

Exemple

$ 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

Recherche par type de fichier

Pour rechercher les fichiers par type, vous pouvez utiliser la commande filepour obtenir une liste d'informations sur le type d'un fichier particulier.

Voici une liste approximative de ces types de fichiers de mon système, Fedora 19.

  • .mp4: ISO Media, système MPEG v4, version 1
  • .mkv: fichier EBML, créateur matroska
  • .wmv: Microsoft ASF
  • .flv: Macromedia Flash Video
  • .webm: WebM
  • .mov: ISO Media, film Apple QuickTime
  • .avi: AVI

Vous pouvez utiliser cette commande pour rechercher tous les fichiers de votre /home/<user>répertoire.

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

Alternativement, vous pouvez utiliser fileet rechercher par types de mime classés comme «vidéo».

 -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”.

Adapter ce que nous avons fait ci-dessus à quelque chose comme ceci:

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

Vous pouvez utiliser sedpour obtenir uniquement les noms de fichiers:

$ find /home/<user> -type f -exec file -i {} + |
    sed -n '/video/s/:[^:]\+$//p'
slm
la source
+1, cela suppose bien sûr non seulement que ce locatesoit installé, mais que la base de données soit construite.
Chris Down
Oui, la base de données est généralement construite tous les soirs sur la plupart des distributions, de sorte que les fichiers récemment ajoutés ne seront pas dans la base de données tant que le travail nocturne n'aura pas été exécuté et ajouté.
slm
1
Vous avez oublié l' un des plus commun, avi.
Faheem Mitha
6

Puisque vous spécifiez maintenant qu'il ne peut pas être basé sur une extension, vous pouvez également lire attentivement file(avertissement: cela pourrait prendre beaucoup de temps):

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

Si vous avez pu effectuer une recherche par nom de fichier, en supposant qu'il a une extension vidéo commune et qu'il se trouve quelque part dans votre répertoire personnel:

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

Vous pouvez également utiliser une expression régulière:

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

Si vous avez une bonne idée du moment où vous l'avez téléchargé (et en supposant que mtime a été défini à cette heure), vous pouvez également essayer de le réduire avec l' -mtimeoption GNU find .

Chris Down
la source
1
Vous pouvez également afficher tous les fichiers de taille supérieure à un certain seuil (en supposant que les fichiers vidéo sont très volumineux) ...
ChuckCottrill
Chris Down, cette façon d'utiliser le nom de fichier ne fonctionnera pas. J'ai édité mon Q. s'il vous plaît jetez un oeil
Ravi
@Ravi Voir ma réponse mise à jour, qui utilise des mimetypes.
Chris Down
Votre 1ère commande récupère même de nombreux autres fichiers (autres que vidéo). Par exemple, une ligne de la sortie est: Une /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 autre ligne de la sortie est: /home/ravbholua/Downloads/Music_Command_line/command line - how to start a video from the terminal? - Ask Ubuntu.html: text/html; charset=utf-8 Cela ne résout pas mon objectif.
Ravi