Wie finde ich alle Videodateien auf meinem System?

10

Ich habe versucht, mithilfe der Unity Lens File-Suche nach *.*Last Modified = All, Type = Videos und Size = All zu suchen und zu filtern, aber nichts gefunden, obwohl ich weiß, dass sich in meinem Bilderordner einige .3gp-Dateien befinden. Ich weiß, dass ich auch zahlreiche Videodateien auf einem anderen Laufwerk im Dateisystem habe. Ich habe eine Liste wahrscheinlicher Erweiterungen zusammengestellt und zahlreiche Iterationen des findBefehls unter Verwendung dieser mit find ./ -name "* .ext" -o (etc, etc, ad nauseum) ohne jegliches Glück versucht. Was ist die Lösung?

Elder Geek
quelle
Ich habe es nicht ausprobiert, aber es gab einen Artikel über OMG! Ubuntu über die FSearch App. Vielleicht möchten Sie es überprüfen. omgubuntu.co.uk/2016/10/fsearch-fast-file-search-tool-linux
Jo-Erlend Schinstad
@ Jo-ErlendSchinstad Vielen Dank für den Vorschlag, aber da ich meine Ergebnisse in weniger als 3 Sekunden über die CLI erhalte, bin ich mit diesem Ansatz zufrieden. Ich werde es mir aber ansehen. :-)
Elder Geek
Aber wenn Sie den Befehl nicht verstehen, werden Sie ihn vergessen. Und wenn Sie die Befehle verstanden hätten, hätten Sie die Frage nicht gestellt. Lassen Sie uns Ubuntu verbessern, indem wir es denjenigen leichter machen, die nur die Arbeit erledigen wollen. Sie können dies tun, indem Sie Apps hinzufügen oder Personen auf bereits vorhandene Apps verweisen.
Jo-Erlend Schinstad
@ Jo-ErlendSchinstad Oft fehlt mir das Verständnis, das ich durch Forschung und Analyse erhalte. Ich glaube, dieser Ansatz ist entscheidend für die Entwicklung. Der Erkennungsprozess führte mich zu einer Lösung, die ich hier freigegeben habe, als ich ein Skript erstellt und in ~ / bin abgelegt habe. Ich werde wahrscheinlich nicht vergessen und wissen, wo ich suchen muss, wenn ich es tue. Da es auch in meiner Antwort steht, kann jeder mit der Motivation es auch analysieren und verstehen.
Elder Geek
Du hast recht. Wir brauchen eigentlich keine Desktops. Wir können fast alles mit Kommandozeilen machen. Aber wenn wir wachsen wollen, müssen wir erkennen, dass die meisten Menschen so etwas nicht lernen wollen. Ich kenne Entwickler, die nicht einmal die Unterschiede zwischen dem Stack und dem Heap beschreiben können.
Jo-Erlend Schinstad

Antworten:

14

Alternative: Suche in Datei :

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

oder wenn Sie nur die Dateinamen wollen ...

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

-N, --no-pad: Füllen Sie keine Dateinamen auf

-i, --mime: Bewirkt, dass der Befehl file anstelle von herkömmlichen Zeichenfolgen vom Typ MIME Zeichenfolgen ausgibt. So kann es sagen 'Text / Ebene; Zeichensatz = us-ascii 'anstelle von' ASCII-Text '. Damit diese Option funktioniert, ändert die Datei die Art und Weise, wie Dateien verarbeitet werden, die vom Befehl selbst erkannt werden (z. B. viele der Textdateitypen, Verzeichnisse usw.), und verwendet eine alternative "magische" Datei. (Siehe den Abschnitt DATEIEN unten).


Der Abschnitt DATEIEN verweist auf:

Dateien

/usr/share/misc/magic.mgc Standardmäßig kompilierte Liste der Magie.

/usr/share/misc/magic Verzeichnis mit Standard-Magic-Dateien.


file ist zwar langsamwwwwwwwwwwwwwwwwww (es öffnet alle Dateien, die gefunden werden), hat aber den Vorteil, dass Sie nicht alle diese Erweiterungen hinzufügen müssen.


Verwenden von find:

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
quelle
Welche "DATEIEN Abschnitt, unten"
Elder Geek
hinzugefügt! es wurde in der Manpage versteckt: D
Rinzwind
Das ist seltsam, ich hätte erwartet, dass die Lokalisierung schneller ist, aber mit Ihrem Lokalisierungsbefehl bekomme ich Zeit: echte 0m8.985s und mit meinem Suchbefehl bekomme ich Zeit: echte 0m2.595s
Elder Geek
1
Oh ... find macht alle Dateien. Ihr Fund ist von wo Sie sind, nicht wahr?
Rinzwind
Ich habe den Schalter -e hinzugefügt, der keine großen Auswirkungen hatte, aber die Rückgabe von Ergebnissen für Dateien, die bereits verschwunden sind, schien nicht hilfreich zu sein. Die gewährte Systemzeit ist viel kürzer für das Auffinden, aber die Echtzeit für die Ergebnisse ist alles, was mich wirklich interessiert.
Elder Geek
4

Ich kann mir vorstellen, dass dies als 1-Liner möglich ist, aber es schien etwas umständlich zu sein. findvids.shDeshalb habe ich ein Skript erstellt, um das Starten und Bearbeiten zu vereinfachen, und es so genannt. Das hat bei mir funktioniert.

Hinweis: Ich habe möglicherweise nicht ALLE Videodateitypen behandelt, aber ich bin sicher, dass ich die meisten davon habe. Eine bemerkenswerte Ausnahme ist .mkv, da dies das Zielformat für das Projekt ist und ich die bereits verarbeiteten Dateien nicht finden muss. Es sollte sehr einfach sein, dem Skript zusätzliche Formate (Erweiterungen) hinzuzufügen, die Ihren Anforderungen entsprechen, indem Sie das Muster untersuchen und entsprechend anpassen, während die Anführungszeichen am Anfang und Ende des Ausdrucks beibehalten werden. Beachten Sie, dass Dateien, für die Sie keine Leseberechtigung haben, nicht gefunden werden.

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

Bearbeiten basierend auf Kommentar: Das $am Ende der Erweiterung bedeutet, dass der Suchbegriff am Zeilenende gefunden werden muss. Wenn wir stattdessen den Zeilenanfang abgleichen möchten, verwenden wir ihn ^vor dem Begriff, den wir abgleichen möchten. Diese Anker finden Sie hier näher erläutert .

Ich habe einen Geschwindigkeitsvergleich mit locate durchgeführt und die Ergebnisse waren:

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

Unerwartet zu finden ist schneller. Ich werde diesen Ansatz verwenden.

Bearbeiten: Weitere Tests zeigen an, dass das Auffinden auf einem anderen Computer schneller war. Ich denke, meine anfänglichen Geschwindigkeitstestergebnisse waren aufgrund von Caching nicht gut.

Quellen:

man find

man grep

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

Elder Geek
quelle
touch hello.mp4erstellt keine Videodatei>: - D und Sie möchten sie möglicherweise ändern, um sie locatezu beschleunigen.
Rinzwind
@Rinzwind Gültiger Punkt in Bezug auf touchDa dies jedoch auf diesem System nicht durchgeführt wurde, ist es in diesem Fall nicht wirklich relevant. Was das Auffinden betrifft, müsste ich dann vorher laufen updatedb, um aktuelle Daten zu haben, oder nicht?
Elder Geek
Ja, updateb wird jeden Tag durchgeführt. Wenn Sie also davon ausgehen können, dass Sie nicht einige Stunden brauchen (die Geschwindigkeit, mit der die Ergebnisse zurückgegeben werden, ist um eine Größenordnung höher als bei find: D)
Rinzwind
@Rinzwind Ich würde gerne ein funktionierendes Beispiel dafür sehen, indem ich locate verwende.
Elder Geek
einen Ort hinzugefügt.
Rinzwind