find/-type f -name filename.ext -exec grep -l 'lookingfor' {} +
Używanie +
aby zakończyć polecenie jest bardziej wydajny niż \;
ponieważ find
wysyła całą partię plików grep
zamiast wysyłać je jeden po drugim. Pozwala to uniknąć fork/exec dla każdego znalezionego pliku.
Jakiś czas temu zrobiłem kilka testów, aby porównać skuteczność xargs
vs {} +
vs {} \;
i stwierdziliśmy, że {} +
był szybszy. Oto niektóre z moich wyników:
time find . -name "*20090430*" -exec touch {} +
real 0m31.98s
user 0m0.06s
sys 0m0.49s
time find . -name "*20090430*" | xargs touch
real 1m8.81s
user 0m0.13s
sys 0m1.07s
time find . -name "*20090430*" -exec touch {} \;
real 1m42.53s
user 0m0.17s
sys 0m2.42s
Dodałbym tylko '--color' do' grep', uważam, że o wiele łatwiej jest zobaczyć rzeczy. Właściwie to po prostu zdałem sobie sprawę, że nie bierze on aliasu zdefiniowanego w '.bashrc'. – Alexandre