Yanıtlar:
Peki, stdout'a yazan herhangi bir komutla çalışan genel durum xargs, komutun sonuna herhangi bir sayıda komut satırı argümanı eklemenize izin verecek olan kullanmaktır :
$ find … | xargs grep 'search'
Veya komutu grepsatırınıza backticks ile yerleştirmek veya $()komutunu çalıştıracak ve çıktısının yerini alacak:
$ grep 'search' $(find …)
Dosya adları boşluk, ya da diğer bazı “tuhaf karakterler” içeriyorsa, bu komutları (çalışmaz unutmayın \'", Xargs için \[*?için $(find …)).
Ancak, findbelirli argümanlar üzerinde bir program yürütme özelliği söz konusu olduğunda , yerleşiktir:
$ find … -exec grep 'search' {} \;
Her şey arasında -execve ;yürütmek için komuttur; {}tarafından bulunan dosya adı ile değiştirilir find. Bu grepher dosya için ayrı bir işlem yürütecektir ; çünkü grepbirçok dosya alıp hepsini arayabilir, değiştirebileceğiniz ;için +tüm eşleştirme dosya geçmek bulmak söylemek grepseferde:
$ find … -exec grep 'search' {} \+
find ... -type f -print0 | xargs -r0 grep 'search' /dev/null. QED. -exec +Çok verimli olsa da, bulmanın tüm sürümlerinde mevcut değil.
$ find … -exec grep 'search' {} \+şeklidir çok hızlı.
Bazı sürümlerinde grep(örneğin gömülü olmayan Linux veya BSD veya Mac OS X'te) -ryinelemeli bir arama yapma seçeneği vardır. OpenBSD'de, kullanın -R(ve --excludeaşağıdaki örnekte olduğu gibi yoktur ). Bu basit kombinasyonlarını kapsamaktadır findile grep.
Uygulamanızın -Rbayrağı bayrakta değilse veya meraklısı dosya eşleştirme ölçütlerini istiyorsanız, yürütmek için -execbirincil olanını kullanabilirsiniz . Daha eski birkaç uygulama desteklemiyor … ; Bu sistemlerde, yerine bir kullanın (bu dosya başına bir kez arayacak , bu yüzden daha yavaş olacak, ancak sonuç aynı olacaktır). Not neden hile (bir var GNU grep ve FreeBSD / NetBSD / OSX grep tek bir dosya üzerinde çağrılacak bir sorun olsa bile dosya adını göstermek için aynı etkiyi elde etmek için seçenek).findgrepfind-exec+;+grep/dev/nullgrep-H
find . -type f -name '*.o' -prune -o -exec grep 'needle' /dev/null {} +
grep -r --exclude='*.o' 'needle' .
GNU grep-Hher zaman dosya adını yazdırma seçeneği vardır .