Jak mogę znaleźć wszystkie pliki wideo w moim systemie?

11

Próbowałem użyć wyszukiwania pliku Unity Lens *.*i filtrowania według Ostatnia modyfikacja = Wszystkie, Typ = Wideo i Rozmiar = Wszystkie, ale nic nie znalazłem, chociaż wiem, że w folderze Zdjęcia są pliki .3gp. Wiem, że mam także wiele plików wideo na innym dysku zamontowanym w systemie plików. Skompilowałem listę prawdopodobnych rozszerzeń i próbowałem wielu iteracji findpolecenia, używając ich z find ./ -name "* .ext" -o (itp., Itp., Na muzeum) bez żadnego szczęścia. Jakie jest rozwiązanie?

Starszy Geek
źródło
Nie próbowałem tego, ale był artykuł na temat OMG! Ubuntu o aplikacji FSearch. Możesz to sprawdzić. omgubuntu.co.uk/2016/10/fsearch-fast-file-search-tool-linux
Jo-Erlend Schinstad
@ Jo-ErlendSchinstad Dziękuję za sugestię, ale ponieważ otrzymuję wyniki za pośrednictwem interfejsu CLI w mniej niż 3 sekundy, jestem zadowolony z tego podejścia. Spojrzę na to. :-)
Elder Geek
Ale jeśli nie zrozumiesz polecenia, zapomnisz o tym. A jeśli zrozumiałbyś polecenia, nie zadałbyś tego pytania. Poprawmy Ubuntu, ułatwiając tym, którzy chcą po prostu wykonać zadanie. Możesz to zrobić, dodając aplikacje lub wskazując użytkownikom aplikacje, które już tam są.
Jo-Erlend Schinstad
@ Jo-ErlendSchinstad Często zaczynam brakować zrozumienia, które uzyskuję poprzez badania i analizy. Uważam, że takie podejście ma zasadnicze znaczenie dla rozwoju. Proces odkrywania doprowadził mnie do rozwiązania, które postanowiłem udostępnić tutaj, ponieważ stworzyłem skrypt i umieściłem go w ~ / bin. Nie zapomnę i nie wiem, gdzie szukać, jeśli to zrobię. Ponieważ jest to również moja odpowiedź, każdy, kto ma motywację, również może to przeanalizować i zrozumieć.
Elder Geek
Masz rację. Tak naprawdę nie potrzebujemy komputerów stacjonarnych. Możemy zrobić prawie wszystko za pomocą linii poleceń. Ale jeśli chcemy się rozwijać, musimy zdać sobie sprawę, że większość ludzi nie chce się tego nauczyć. Znam programistów, którzy nie potrafią nawet opisać różnic między stosem a stertą.
Jo-Erlend Schinstad

Odpowiedzi:

14

Alternatywnie: wyszukaj w pliku :

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

lub jeśli chcesz tylko nazwy plików ...

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

-N, --no-pad: Nie wpisuj nazw plików

-i, --mime: Powoduje, że polecenie file wyświetla łańcuchy znaków typu mime zamiast bardziej tradycyjnych, czytelnych dla człowieka. Dlatego może powiedzieć „tekst / zwykły; charset = us-ascii ”zamiast„ tekst ASCII ”. Aby ta opcja działała, plik zmienia sposób, w jaki obsługuje pliki rozpoznawane przez samo polecenie (takie jak wiele typów plików tekstowych, katalogów itp.), I wykorzystuje alternatywny plik „magiczny”. (Zobacz sekcję PLIKI poniżej).


Sekcja PLIKI wskazuje na:

Akta

/usr/share/misc/magic.mgc Domyślnie skompilowana lista magii.

/usr/share/misc/magic Katalog zawierający domyślne pliki magiczne.


file jest powolnywwwwwwwwwwwwwwww chociaż (otworzy wszystkie znalezione znalezione pliki), ale ma tę zaletę, że nie trzeba dodawać wszystkich tych rozszerzeń.


Za pomocą zlokalizuj:

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
źródło
Która „sekcja PLIKI, poniżej”
Starszy Geek
dodany! został ukryty na stronie
podręcznika
To dziwne, spodziewałbym się, że lokalizowanie będzie szybsze, ale dzięki twojej komendzie lokalizacyjnej dostaję czas: prawdziwe 0m 8,985s, a przy mojej komendzie znajdującej dostaję czas: prawdziwe 0m2,595s
Starszy Geek
1
Oh ... locate wykonuje wszystkie pliki. Twoje znalezisko pochodzi z miejsca, w którym jesteś, prawda?
Rinzwind
Dodałem przełącznik -e, który nie miał większego wpływu, ale zwracanie wyników dla plików, które już zniknęły, nie wydawało się pomocne. przyznany czas sys jest znacznie krótszy na lokalizację, ale naprawdę zależy mi na czasie rzeczywistym.
Elder Geek
5

Wyobrażam sobie, że można to zrobić jako 1-liniowy, ale wydawało mi się to trochę kłopotliwe, więc stworzyłem skrypt ułatwiający uruchamianie i edycję i nazwałem go findvids.shTo właśnie działało dla mnie.

Uwaga: Być może nie obejmowałem WSZYSTKICH typów plików wideo, ale jestem pewien, że mam większość z nich. Jednym godnym uwagi wyjątkiem jest .mkv, ponieważ jest to format docelowy projektu i nie muszę szukać plików, które zostały już przetworzone. Dodanie dodatkowych formatów (rozszerzeń) do skryptu powinno być bardzo proste, aby dopasować je do twoich potrzeb, analizując wzór i odpowiednio dostosowując, zachowując cudzysłowy na początku i na końcu wyrażenia. Pamiętaj, że pliki, których nie masz uprawnień do odczytu, nie zostaną znalezione.

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

Edycja na podstawie komentarza:$ na końcu oznacza, że przedłużenie terminu wyszukiwania musi się znaleźć na końcu linii. gdybyśmy chcieli dopasować początek linii, użylibyśmy ^przed terminem, który zamierzamy dopasować. Możesz znaleźć te kotwice wyjaśnione bardziej szczegółowo tutaj.

Zrobiłem porównanie prędkości przy użyciu locate, a wyniki były następujące:

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

Nieoczekiwanie znalezienie jest szybsze. Będę używał tego podejścia.

Edycja: dalsze testy wskazują, że lokalizacja była szybsza na innym komputerze. Myślę, że moje początkowe wyniki testu prędkości były piętrowe z powodu buforowania.

Źródła:

man find

man grep

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

Starszy Geek
źródło
touch hello.mp4nie tworzy pliku wideo>: - D i możesz go zmienić na, locateaby przyspieszyć.
Rinzwind
@Rinzwind Ważny punkt dotyczący touchJednak ponieważ nie zostało to zrobione w tym systemie, w tym przypadku tak naprawdę nie ma to znaczenia. Jeśli chodzi o lokalizację, musiałbym wtedy uruchomić updatedb, aby mieć aktualne dane, czyż nie?
Starszy Geek
Tak, aktualizacjab jest wykonywana codziennie, więc jeśli możesz założyć, że nie musisz trwać kilka godzin (szybkość, którą zwraca, wyniki są o wiele wyższe niż w przypadku find: D)
Rinzwind
@Rinzwind Chciałbym zobaczyć działający przykład tego za pomocą locate.
Elder Geek
dodano lokalizację.
Rinzwind