Vím, že toto je staré vlákno, ale narazil jsem na něj a řekl jsem si, že se podělím o svou metodu, o které jsem zjistil, že je to velmi rychlý způsob použití find
najít pouze nebinární soubory:
find . -type f -exec grep -Iq . {} \; -print
-I
volba grep mu říká, že má okamžitě ignorovat binární soubory a .
možnost spolu s -q
bude okamžitě odpovídat textovým souborům, takže to jde velmi rychle. Můžete změnit -print
na -print0
pro potrubí do xargs -0
nebo tak něco, pokud máte obavy o prostory (díky za tip, @lucas.werkmeister!)
Také první tečka je nutná pouze pro určité BSD verze find
jako na OS X, ale ničemu neuškodí, když to tam chcete mít pořád, pokud to chcete vložit do aliasu nebo tak.
UPRAVIT :Jak @ruslan správně zdůraznil, -and
lze vynechat, protože je implicitní.
Na základě této otázky SO :
grep -rIl "needle text" my_folder
Proč je to nešikovné? Pokud ji potřebujete používat často a nechcete ji pokaždé zadávat, definujte pro ni bash funkci:
function findTextInAsciiFiles {
# usage: findTextInAsciiFiles DIRECTORY NEEDLE_TEXT
find "$1" -type f -exec grep -l "$2" {} \; -exec file {} \; | grep text
}
vložte jej do vašeho .bashrc
a pak stačí spustit:
findTextInAsciiFiles your_folder "needle text"
kdykoli budete chtít.
UPRAVIT aby odrážely úpravy OP:
pokud chcete vyjmout mime informace, můžete do potrubí přidat další fázi, která filtruje mime informace. To by mělo stačit, protože vezmete pouze to, co je před :
:cut -d':' -f1
:
function findTextInAsciiFiles {
# usage: findTextInAsciiFiles DIRECTORY NEEDLE_TEXT
find "$1" -type f -exec grep -l "$2" {} \; -exec file {} \; | grep text | cut -d ':' -f1
}