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
risposta
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
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. –
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.
Funziona perfettamente!Bella soluzione – fuuman
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
Questo non fornisce il metodo per filtrare il file tranne per cercare manualmente i tipi di file. – blissfool
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
Solo per AFAIK Windows si fida dell'estensione del file. I SO tipo UNIX usano 'file'. Ad ogni modo, devi definire "leggibile". – m0skit0
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)? –