2013-05-26 7 views
31

Istnieje wiele rodzajów obrazów graficznych w tym ogromnym archiwum, takim jak .jpg, .gif, .png, itp. Nie znam wszystkich typów. Czy istnieje sposób "find", aby móc wyświetlić wszystkie grafiki bez względu na nazwę rozszerzenia kropki? Dzięki!Linux find: Lista wszystkich plików graficznych z findem?

+1

Obawiam się, że będziesz musiał napisać skrypt basha, który wywoła funkcję find wraz ze wszystkimi rozszerzeniami. –

+0

Czy byłby połączony w jakiś sposób z poleceniem "file", które zna typ pliku? – Edward

Odpowiedz

39

To powinno załatwić sprawę

find . -name '*' -exec file {} \; | grep -o -P '^.+: \w+ image' 

Przykâadowa:

./navigation/doc/Sphärische_Trigonometrie-Dateien/bfc9bd9372f650fd158992cf5948debe.png: PNG image 
./navigation/doc/Sphärische_Trigonometrie-Dateien/6564ce3c5b95ded313b84fa918b32776.png: PNG image 
./navigation/doc/subr_1.jpe: JPEG image 
./navigation/doc/Astroanalytisch-Dateien/Gamma.gif: GIF image 
./navigation/doc/Astroanalytisch-Dateien/deltaS.jpg: JPEG image 
./navigation/doc/Astroanalytisch-Dateien/GammaBau.jpg: JPEG image 
+1

Czy istnieje podobne podejście, które można zastosować w przypadku wideo? Wygląda na to, że zastąpienie "obrazu" przez "wideo" pomija quicktime i formaty Matroska ... –

+1

@ElderGeek Chciałbym uruchomić plik na niektórych przykładach i sprawdzić, czy był fragment tekstu, na który mógłbym pomknąć. W sekcji obrazu rozwiązania awk można było rozdzielić wzory na przemian, na przykład/video | image | foo/zwróciłoby wszystkie pliki, które miały słowo wideo, obraz lub foo w swoim opisie z pliku. – f3xy

+0

Jakieś pomysły dotyczące tego, w jaki sposób mogę pozbyć się: obrazu GIF lub: obrazu JPEG i pozostawić tylko nazwę pliku plus ścieżkę, aby móc przekazać go do innego polecenia jako wyjście? – VaTo

10
find . -type f -exec file {} \; | grep -o -P '^.+: \w+ image' 

powinno być jeszcze lepiej.

+1

dlaczego jest lepiej ? – Selah

20

Poniższe elementy pasują mi lepiej, ponieważ w moim przypadku chciałem potokować tę listę plików do innego programu.

find . -type f -exec file {} \; | awk -F: '{if ($2 ~/image/) print $1}' 
+0

To jest naprawdę domyślna odpowiedź, jeśli chcesz wyprowadzić wyjście. Dzięki! –

3

Pomijanie lub używanie awk tylko w przypadku "obrazu" tego nie zrobi. Pliki PSD będą identyfikowane przez "Obraz" z kapitałem "I", więc musimy poprawić wyrażenie regularne, aby nie było rozróżniania wielkości liter, a także uwzględnić kapitał I. Pliki EPS nie zawierają w ogóle słowa "obraz", więc trzeba również dopasować do "EPS" lub "Postscriptu" w zależności od tego, co chcesz. Więc tutaj jest moja ulepszona wersja:

find . -type f -exec file {} \; | awk -F: '{ if ($2 ~/[Ii]mage|EPS/) print $1}' 
-1

dotyczących tego samego problemu, właśnie opublikował narzędzie o nazwie photofind (https://github.com/trimap/photofind). Zachowuje się jak normalne polecenie find, ale specjalizuje się w plikach obrazów i obsługuje filtrowanie wyników również w oparciu o informacje EXIF ​​przechowywane w plikach graficznych. Zobacz więcej szczegółów w github-repo.

+2

Link do rozwiązania jest mile widziany, ale upewnij się, że twoja odpowiedź jest przydatna bez niego: [dodaj kontekst związany z linkiem] (http://meta.stackexchange.com/a/8259), aby inni użytkownicy mieli pewne pojęcie to jest i dlaczego tam jest, a następnie zacytuj najbardziej odpowiednią część strony, do której prowadzi link, jeśli strona docelowa jest niedostępna. [Odpowiedzi, które są niewiele więcej niż link, można usunąć] (http://stackoverflow.com/help/deleted-answers). – mrun

+0

Podczas gdy ten link może odpowiedzieć na pytanie, lepiej umieścić w nim istotne części odpowiedzi i podać link do odsyłacza. Odpowiedzi dotyczące linków mogą stać się nieprawidłowe, jeśli strona z linkami się zmieni. - [Z recenzji] (/ review/low-quality-posts/17292640) –

+0

To narzędzie wydaje się opierać na nazwie pliku kończącego się rozszerzeniem pliku. To nie jest tak blisko, jak sprawdzanie wyniku polecenia pliku.Z podanego linku znajduje się przykład wywołania find ('find ~/Pictures \ (-iname" * .jpg "-lub -iname" * .jpeg "-lub -iname" * .png "-lub -iname "* .tif" -lub -iname "* .bmp" -lub -iname "* .gif" -lub -iname "*. xpm" -lub -iname "* .nef" -lub -iname "* .cr2" -lub -iname "* .arw" \) -size + 20k') – f3xy

Powiązane problemy