Jak wyszukiwać pliki wideo na Ubuntu?


12

Pobrałem film kilka miesięcy temu. Nie bardzo dobrze pamiętam nazwę, pod którą jest zapisany. Czy jest jakieś polecenie lub jakakolwiek metoda, która wyświetli tylko pliki wideo, aby móc tam wyszukać moje wideo? Ze stron podręcznika nie mogłem znaleźć żadnej opcji znalezienia takiej pracy.

Pobrany plik wideo może mieć dowolne rozszerzenie (np. Webm itp.). Możliwe też, że zmieniłem nazwę na coś takiego jak „abcde”, którego teraz nie pamiętam. Tak więc wyszukiwanie nie może być oparte na nazwie pliku!

(Wystarczy wspomnieć o jednym podobieństwie: w Perlu istnieją polecenia sprawdzające, czy plik jest plikiem tekstowym czy binarnym itp. Podobnie może istnieć sposób sprawdzenia, czy jego plik wideo lub plik multimedialny)

Odpowiedzi:


15

Podstawową ideą jest użycie narzędzia plikowego do określenia typu każdego pliku i filtrowania plików wideo.

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

Spowoduje to wydrukowanie nazw wszystkich plików /some/directoryi ich podkatalogów rekurencyjnie, których typ MIME jest typem wideo.

fileKomenda musi otworzyć każdy plik, który może być powolne. Aby przyspieszyć:

  • Ogranicz komendę do drzew katalogów, w których może się ona znajdować, takich jak /tmp, /var/tmpi do katalogu domowego.
  • Ogranicz wyszukiwanie do plików, których rozmiar jest w odpowiednim polu, powiedz co najmniej 10 MB.
  • Ogranicz wyszukiwanie do plików, których czas modyfikacji znajduje się w odpowiednim polu. Pamiętaj, że pobieranie pliku mogło ustawić czas modyfikacji na czas pobierania lub zachować ten czas, w zależności od programu, którego użyłeś do pobrania (i przy jakich ustawieniach). Możesz także filtrować według czasu zmiany i-węzła (ctime), czyli czasu ostatniej modyfikacji lub przenoszenia pliku (utworzenia, zmiany nazwy itp.) W dowolny sposób.

Oto przykład, który ogranicza czas modyfikacji do co najmniej 60 dni temu, a czas do nie więcej niż 100 dni temu.

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

Twoje pierwsze polecenie pobiera wiele innych plików (innych niż wideo). Na przykład jeden wiersz danych wyjściowych: /home/ravbholua/Downloads/Music_Command_line/[SOLVED] a code question regarding music file extensions_files/avatar774785_6.gif: image/jpeg; charset=binary Inny wiersz danych wyjściowych: /home/ravbholua/Free Computer Networking Books Download | Ebooks Online Textbooks.html: text/html; charset=iso-8859-1 Potrzebuję tylko plików wideo, które będą działać w odtwarzaczu VLC itp.
Ravi

@Ravi Przypadkowo pominąłem opcję sedwykluczenia niepasujących linii (a także opcję filenie przerywania linii w niewłaściwym miejscu), zobacz moją edycję.
Gilles „SO - przestań być zły”,

Tak, Gilles, właśnie tego chciałem. To działało doskonale! Po uruchomieniu polecenia dowiedziałem się, że mój system ma wiele filmów (niektóre kompletne, a niektóre niekompletne), o których nie wiedziałem. Dziękuję Ci.
Ravi

1
Jest to idealne rozwiązanie, jeśli pliki wideo nie mają przewidywalnych rozszerzeń. fileJedynym rozwiązaniem jest uciekanie się do .
miguelg

13

Wyszukiwanie według nazwy pliku

Jak wspomniał Chris w swojej odpowiedzi, możesz findto zrobić, ale znacznie szybciej przeszukuję locatebazę danych.

Zakładając, że twoja dystrybucja zapewnia tę funkcję, większość dużych to robi, Ubuntu, Fedora, CentOS itp.

Przykład

$ 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

Wyszukiwanie według typu pliku

Aby znaleźć pliki według typu, możesz użyć polecenia, fileaby uzyskać listę informacji o typie określonego pliku.

Oto przybliżona lista tych typów plików z mojego systemu Fedora 19.

  • .mp4: ISO Media, system MPEG v4, wersja 1
  • .mkv: plik EBML, twórca matroska
  • .wmv: Microsoft ASF
  • .flv: Macromedia Flash Video
  • .webm: WebM
  • .mov: ISO Media, film Apple QuickTime
  • .avi: AVI

Możesz użyć tego polecenia, aby znaleźć wszystkie pliki w /home/<user>katalogu.

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

Alternatywnie możesz używać filei wyszukiwać według typów MIME, które są sklasyfikowane jako „wideo”.

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

Dostosowując to, co zrobiliśmy powyżej, do czegoś takiego:

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

Możesz użyć, sedaby uzyskać tylko nazwy plików:

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

+1, to oczywiście nie tylko zakłada, że locatejest zainstalowany, ale że baza danych jest zbudowana.
Chris Down

Tak, baza danych jest zwykle budowana co noc na większości dystrybucji, więc ostatnio dodane pliki nie będą w DB, dopóki zadanie nocne nie zostanie uruchomione i dodane.
slm

1
Zapomniałeś jedną z najczęstszych, avi.
Faheem Mitha,

6

Ponieważ teraz określasz, że nie może być oparty na rozszerzeniu, możesz również przejrzeć file(ostrzeżenie: może to zająć dużo czasu):

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

Jeśli mógłbyś wyszukiwać według nazwy pliku, zakładając, że ma wspólne rozszerzenie wideo i znajduje się gdzieś w twoim katalogu domowym:

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

Możesz także użyć wyrażenia regularnego:

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

Jeśli masz dobry pomysł, kiedy go pobrałeś (i zakładając, że mtime został ustawiony na ten czas), możesz również spróbować zawęzić go -mtimeopcją GNU find .


1
Możesz także wyświetlić wszystkie pliki większe niż jakiś próg (zakładając, że pliki wideo są bardzo duże) ...
ChuckCottrill

Chris Down, ten sposób używania nazwy pliku nie zadziała. Zredagowałem moje Q. proszę spojrzeć
Ravi

@Ravi Zobacz moją zaktualizowaną odpowiedź, która wykorzystuje mimetypy.
Chris Down,

Twoje pierwsze polecenie pobiera nawet wiele innych plików (innych niż wideo). Na przykład jedna linia z wyjścia to: /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 Inna linia z wyjścia to: /home/ravbholua/Downloads/Music_Command_line/command line - how to start a video from the terminal? - Ask Ubuntu.html: text/html; charset=utf-8 To nie rozwiązuje mojego celu.
Ravi,
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.