2013-01-24 15 views
5

Chciałbym znaleźć pliki czytelne dla człowieka na moim komputerze z systemem Linux bez ograniczenia pliku rozszerzenia. Pliki te powinny zawierać ludzkie pliki, takie jak tekst, konfiguracja, html, kod źródłowy itp. Czy możesz zaproponować sposób filtrowania i lokalizowania.Znajdowanie plików czytelnych dla człowieka na unixie

+1

Narzędzie 'file' jest całkiem niezłe przy określaniu typu zawartości w pliku. Być może mógłbyś użyć tego i filtrować pliki na podstawie ich danych wyjściowych. – cdhowie

+0

Tylko system AFAIK System Windows ufa rozszerzeniu pliku. Systemy OSIX-podobne używają 'file'. W każdym razie musisz zdefiniować "czytelny dla człowieka". – m0skit0

+0

Jak dokładnie to musi być? Czy szukasz KAŻDEGO pliku w systemie, czy tylko w wybranej części systemu? Co się stanie, jeśli system ma przydzielone terabajty dysków, czy można odczekać kilka godzin (ponieważ tyle czasu zajmuje odczytanie wszystkich plików)? –

Odpowiedz

6

znaleźć i plik są twoi przyjaciele tutaj:

find /dir/to/search -type f -exec sh -c 'file -b {} | grep text &>/dev/null' \; -print 

ten znajdzie żadnych plików (uwaga: to nie znajdzie Symlinks katalogów gniazdek itp tylko zwykłe pliki) w/dir/do/search and run sh - c 'plik -b {} | grep text &>/dev/null '\; który patrzy na typ pliku i szuka tekstu w opisie. jeśli to zwróci true (tzn. tekst znajduje się w wierszu), to drukuje nazwę pliku.

UWAGA: użycie opcji -b w filemeans powoduje, że nazwa pliku nie jest drukowana i dlatego nie może powodować problemów z grep. np. bez opcji -b plik binarny gettext został błędnie wykryty jako plik tekstowy.

np

[email protected]# find /bin -exec sh -c 'file -b {} | grep text &>/dev/null' \; -print 
/bin/gunzip 
/bin/svnshell.sh 
/bin/unicode_stop 
/bin/unicode_start 
/bin/zcat 
/bin/redhat_lsb_init 
[email protected]# find /bin -type f -name *text* 
/bin/gettext 

EDIT:

Jeśli chcesz szukać w plikach skompresowanych użyć --uncompress flagę do pliku. aby uzyskać więcej informacji i flagi złożyć zobaczyć man file

+0

Jestem nowy w ekosystemie uniksopodobnym. Dlaczego używasz "&" na końcu twojego 'grep'? Rozumiem, że to spowoduje, że grep będzie działał asynchronicznie. Czy to nadal daje status wyjścia do 'find'? Dlaczego miałbyś to robić? Dziękuję za poświęcenie czasu na odpowiedź. –

10

Jak o

find /dir/to/search -type f | xargs file | grep text

find daje listę plików.

xargs file uruchomi komendę file dla każdej linii z potokowego wejścia.

+0

Działa idealnie!Ładne rozwiązanie. – fuuman

-1

używam

file directory/to/search/* 

Na przykład, aby znaleźć tylko człowiekiem plików czytelny w katalogu o nazwie użytku domowego:

file home/* 

i pliku czytelnego będą miały formatu takich jak tekst ASCII

+0

Nie zapewnia metody filtrowania pliku poza ręcznym skanowaniem w poszukiwaniu typów plików. – blissfool

Powiązane problemy