Yanıtlar:
Seni doğru anlarsam, yapmak istediğin şey bu:
find . -name '*.py' -print0 | xargs -0 grep 'something' > output.txt
Finduzantılı tüm dosyalar py, grepsadece satırları içeren somethingve içine alan satırlar output.txt. Dosya bir şey içeriyorsa değiştirilecektir.
Düzenleme: -exec kullanarak:
find . -name '*.py' -exec grep 'something' {} \; > output.txt
Chris Downs'un yorumunu buraya ekliyorum. Yukarıdaki komut, buldukların meydana geldiği grepkadar çok kez çalıştırılmasına neden olur find. Değiştirmeye Ancak, ;bir ile +, grepgelen çıkışıyla denir find(belli bir sınıra kadar) birleştirilmiş. Konuyla ilgili daha fazla bilgi edinmek için exec ile noktalı virgül (;) vs artı (+) kullanımı sorusuna bakın .
grep -HDosyanın dosya adını çıktıya dahil etmek istiyorsanız kullanın .
Eşleşen tüm satırları tüm dosyalara kaydetmek istiyorsanız , komutun sonunda output.txtgerekli ;olanı kaçırmamanız dışında son komutunuz çalışır .
find . -name "*.py" -type f -exec grep "something" {} \; > output.txt
Her çalıştırmanın grepfarklı bir dosyaya çıktı üretmesini istiyorsanız , çıktı dosyasının adını hesaplamak ve yeniden yönlendirmeyi gerçekleştirmek için bir kabuk çalıştırın.
find . -name "*.py" -type f -exec sh -c 'grep "something" <"$0" >"$0.txt"' {} \;
find . -name "*.py" -type f -exec grep "something" {} \; -print > output.txt Ve eğer kullanılabilinir grep'ed hatlarının hat numaralarını görmek isterseniz, elbette, kullanabilirsinizgrep -n "something"
Kullanım tee:
find . -name '*.py' | tee output.txt | xargs grep 'something'
İkaz, sen (boşluklar dahil) özel karakterler ile herhangi bir dosya varsa olduğunu xargsve grep(iyi çalışmaz a file.txtiki dosyaları olarak yorumlanır, edilecek ave file.txt). Buna alternatif ya kullanmaktır -xOr -print0, ancak bunlardan Ya kirletir output.txt. -xKullanacaktır \belli özel karakterler kaçmayı ve bu olacaktır output.txt. -print0(Aynı zamanda gerektiren bir alan ayırıcı olarak boş bayt kullanır xargs -0) ve output.txtmetnin bir uzun bitişik çizgi gibi görünür.
Bununla nasıl başa çıkacağınız (veya yapmadığınız) size kalmış.
+Bunun yerine kullanım\;, yürütme süresini önemli ölçüde iyileştirir (yürütmeden önce argümanları daraltacağından dolayıARG_MAX).