2013-01-24 11 views
5

Mi piacerebbe trovare file leggibili dall'uomo sulla mia macchina Linux senza un limite di estensione del file. Questi file dovrebbero essere di file di rilevamento umano come file di testo, configurazione, html, codice sorgente ecc. Potresti suggerire un modo per filtrare e localizzare.Trovare file leggibili su Unix

+1

L'utilità 'file' è abbastanza buona per determinare il tipo di contenuto in un file. Forse potresti usare questo e filtrare i file in base al suo output. – cdhowie

+0

Solo per AFAIK Windows si fida dell'estensione del file. I SO tipo UNIX usano 'file'. Ad ogni modo, devi definire "leggibile". – m0skit0

+0

Quanto deve essere esattamente questo? E stai cercando OGNI file nel sistema, o solo in una parte selezionata del sistema? Cosa succede se il sistema dispone di un terpesto di terabyte di dischi collegati, è accettabile attendere alcune ore (perché è quanto tempo ci vuole per leggere tutti i file effettivamente)? –

risposta

6

ritrovamento e il file sono i tuoi amici qui:

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

questo troveranno tutti i file (NOTA: non troverà i link simbolici directory prese ecc solo i file regolari) in/dir/a/di ricerca ed eseguire sh - c 'file -b {} | grep text &>/dev/null '\; che guarda il tipo di file e cerca il testo nella descrizione. se restituisce true (cioè il testo è nella riga), stampa il nome del file.

NOTA: utilizzare il flag -b per i filemeans che il nome del file non viene stampato e quindi non può creare alcun problema con grep. es. senza il flag -b il file binario gettext verrebbe erroneamente rilevato come un file di testo.

esempio

[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:

Se si vuole guardare in file compressi usano la bandiera --uncompress file. per maggiori informazioni e bandiere per file Vedere man file

+0

Sono nuovo nell'ecosistema unix-like. Perché stai usando "&" alla fine del tuo 'grep'? La mia comprensione è che questo renderà grep eseguito in modo asincrono. Questo ancora darà lo stato di uscita a 'find'? Perché dovrebbe farlo? Grazie per aver trovato il tempo di rispondere. –

10

Come su

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

find vi darà un elenco di file.

xargs file eseguirà il comando file su ciascuna delle righe dall'input del pipe.

+0

Funziona perfettamente!Bella soluzione – fuuman

-1

io uso

file directory/to/search/* 

Ad esempio, per trovare solo i file leggibili in una directory chiamata uso domestico:

file home/* 

e il file leggibile avrà un formato come testo ASCII

+0

Questo non fornisce il metodo per filtrare il file tranne per cercare manualmente i tipi di file. – blissfool

Problemi correlati