Wie kann man unter Ubuntu nach Videodateien suchen?


12

Ich hatte vor ein paar Monaten ein Video heruntergeladen. Ich erinnere mich nicht sehr gut an den Namen, unter dem es gespeichert ist. Gibt es einen Befehl oder eine Methode, die nur Videodateien ausgibt, damit ich dort nach meinem Video suchen kann? Auf den Manpages konnte ich keine Option finden, um diese Arbeit zu erledigen.

Die heruntergeladene Videodatei kann eine beliebige Erweiterung haben (z. B. "webm" usw.), und es ist auch möglich, dass ich den Namen zu dieser Zeit in "abcde" geändert habe, an das ich mich jetzt nicht mehr erinnere. Die Suche kann also nicht auf dem Dateinamen basieren!

(Nur um eine Ähnlichkeit zu erwähnen: In Perl gibt es Befehle, um zu prüfen, ob eine Datei eine Textdatei oder eine Binärdatei ist. Ebenso kann geprüft werden, ob die Videodatei oder die Multimediadatei vorhanden ist.)

Antworten:


14

Die Grundidee ist es, die zu verwenden Datei - Dienstprogramm den Typ jeder Datei , um zu bestimmen, und das Filter auf Video - Dateien.

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

Dies gibt die Namen aller Dateien in /some/directoryund ihrer Unterverzeichnisse rekursiv aus, deren MIME- Typ ein Videotyp ist.

Der fileBefehl muss jede Datei öffnen, die langsam sein kann. Um die Dinge zu beschleunigen:

  • Beschränken Sie den Befehl an die Verzeichnisbäume , wo es wahrscheinlich zu sein, wie zum Beispiel /tmp, /var/tmpund Ihr Home - Verzeichnis.
  • Schränken Sie die Suche auf Dateien ein, deren Größe im richtigen Bereich liegt, beispielsweise auf mindestens 10 MB.
  • Schränken Sie die Suche auf Dateien ein, deren Änderungszeitpunkt im richtigen Baseballstadion liegt. Beachten Sie, dass beim Herunterladen der Datei die Änderungszeit möglicherweise auf den Zeitpunkt des Herunterladens festgelegt oder beibehalten wurde, je nachdem, welches Programm Sie zum Herunterladen verwendet haben (und mit welchen Einstellungen). Sie können auch nach der Inode-Änderungszeit (ctime) filtern. Hierbei handelt es sich um die Zeit, zu der die Datei zuletzt geändert oder verschoben (erstellt, umbenannt usw.) wurde.

Hier ist ein Beispiel, das die Änderungszeit auf mindestens 60 Tage und die Uhrzeit auf höchstens 100 Tage beschränkt.

find /tmp /var/tmp ~ -type f -size +10M \
     -mtime +60 -ctime -100 \
     -exec file -N -i -- {} + |
sed -n 's!: video/[^:]*$!!p'

Ihr erster Befehl ruft viele andere (außer Video-) Dateien ab. Zum Beispiel ist eine Zeile der Ausgabe: /home/ravbholua/Downloads/Music_Command_line/[SOLVED] a code question regarding music file extensions_files/avatar774785_6.gif: image/jpeg; charset=binary Eine andere Zeile der Ausgabe ist: /home/ravbholua/Free Computer Networking Books Download | Ebooks Online Textbooks.html: text/html; charset=iso-8859-1 Ich benötige nur Videodateien, die im VLC-Player usw. ausgeführt werden
Ravi

@Ravi Ich habe versehentlich die Option ausgelassen sed, nicht übereinstimmende Zeilen auszuschließen (und auch die Option, fileZeilen nicht an der falschen Stelle zu brechen), siehe meine Bearbeitung.
Gilles 'SO- hör auf böse zu sein'

Ja, Gilles, das wollte ich. Das hat super geklappt! Nachdem ich Ihren Befehl ausgeführt habe, habe ich festgestellt, dass mein System viele (teilweise vollständige und teilweise unvollständige) Videos enthält, die mir nicht bekannt waren. Vielen Dank.
Ravi

1
Dies ist die ideale Lösung, wenn Ihre Videodateien keine vorhersehbaren Erweiterungen haben. Der Rückgriff auf fileist die einzige Option.
Miguelg

13

Suche nach Dateinamen

Wie Chris in seiner Antwort erwähnt hat, können findSie dies tun, aber ich finde es viel schneller, die locateDatenbank zu durchsuchen .

Vorausgesetzt, Ihre Distribution bietet diese Möglichkeit, die meisten großen, Ubuntu, Fedora, CentOS usw.

Beispiel

$ 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

Suche nach Dateityp

Um die Dateien nach Typ zu suchen, können Sie den Befehl verwenden file, um eine Liste mit Informationen zu einem bestimmten Dateityp abzurufen.

Hier ist eine grobe Liste dieser Dateitypen aus meinem System Fedora 19.

  • .mp4: ISO-Medien, MPEG v4-System, Version 1
  • .mkv: EBML-Datei, Ersteller Matroska
  • WMV: Microsoft ASF
  • .flv: Macromedia Flash Video
  • .webm: WebM
  • .mov: ISO-Medien, Apple QuickTime-Film
  • .avi: AVI

Mit diesem Befehl können Sie alle Dateien in Ihrem /home/<user>Verzeichnis suchen .

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

Alternativ können Sie fileMIME-Typen verwenden und nach diesen suchen, die als "Video" kategorisiert sind.

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

Anpassen, was wir oben gemacht haben:

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

Sie können verwenden sed, um nur die Dateinamen zu erhalten:

$ find /home/<user> -type f -exec file -i {} + |
    sed -n '/video/s/:[^:]\+$//p'

+1, das setzt natürlich auch nicht nur voraus, dass locatedas installiert ist, sondern dass die Datenbank aufgebaut ist.
Chris Down

Ja, auch die Datenbank wird normalerweise in den meisten Distributionen nachts erstellt, sodass kürzlich hinzugefügte Dateien erst dann in der Datenbank gespeichert werden, wenn der nächtliche Job ausgeführt und hinzugefügt wurde.
slm

1
Sie haben vergessen , eine der häufigsten, avi.
Faheem Mitha

6

Da Sie jetzt angeben, dass es nicht auf einer Erweiterung basieren darf, können Sie auch nachlesen file (Warnung: Dies kann lange dauern):

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

Wenn Sie nach dem Dateinamen gesucht haben könnten, unter der Annahme, dass er eine gemeinsame Videoerweiterung hat und sich irgendwo in Ihrem Home-Verzeichnis befindet:

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

Sie können auch einen regulären Ausdruck verwenden:

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

Wenn Sie eine gute Vorstellung davon haben, wann Sie es heruntergeladen haben (und davon ausgegangen sind, dass die M-Zeit auf diese Zeit eingestellt war), können Sie auch versuchen, es mit der -mtimeOption von GNU find einzugrenzen.


1
Sie können auch alle Dateien
anzeigen, deren

Chris Down, diese Art der Verwendung des Dateinamens funktioniert nicht. Ich habe mein Q bearbeitet. Bitte schauen Sie
Ravi

@ Ravi Siehe meine aktualisierte Antwort, die Mimetypen verwendet.
Chris Down

Ihr erster Befehl ruft sogar viele andere (außer Video-) Dateien ab. Eine Zeile aus der Ausgabe lautet beispielsweise: Eine /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 andere Zeile aus der Ausgabe lautet: /home/ravbholua/Downloads/Music_Command_line/command line - how to start a video from the terminal? - Ask Ubuntu.html: text/html; charset=utf-8 Sie löst meinen Zweck nicht.
Ravi
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.