Yanıtlar:
Seni doğru anlarsam, yapmak istediğin şey bu:
find . -name '*.py' -print0 | xargs -0 grep 'something' > output.txt
Find
uzantılı tüm dosyalar py
, grep
sadece satırları içeren something
ve 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 grep
kadar çok kez çalıştırılmasına neden olur find
. Değiştirmeye Ancak, ;
bir ile +
, grep
gelen çı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 -H
Dosyanı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.txt
gerekli ;
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 grep
farklı 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 xargs
ve grep
(iyi çalışmaz a file.txt
iki dosyaları olarak yorumlanır, edilecek a
ve file.txt
). Buna alternatif ya kullanmaktır -x
Or -print0
, ancak bunlardan Ya kirletir output.txt
. -x
Kullanacaktı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.txt
metnin 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
).