2014-07-10 31 views
6

Kök dizinden belirli bir dize (temel olarak .c dosyaları olarak) arıyorum.grep özyineleme - tutarsızlıklar

Bunu kullandığımda hemen bir liste alırım.

grep -rl "F_capture" . 

Ancak, ben sadece arama .c dosyaları tarafından hızlandırmak çalışırsanız:

grep: warning: ./sys/block/fd0/device/bus/drivers/i8042/i8042/serio1/input:event1/subsystem/event3/device/bus/drivers/pcnet32/0000:00:03.0/subsystem: recursive directory loop 

: Böyle ardışık dizin uyarıları ile ilgili bir takım ile bitirmek

grep -r --include=*.c "F_capture" . 

Uyarıları -s parametresini kullanarak bastırmayı denediğimde, uyarıları alamıyorum ama hiçbir şey alamıyorum - hiç inmeyecek gibi görünmüyor.

grep -rsl --include="*.c" "F_capture" . 

Yani benim sorum tahmin niçin hemen dönüş şey kullanılmış ve dosyanın belirli türde bir hedeflediğim diğer türleri asmak gibi görünüyor ilk grep. Hedeflenen aramanın daha hızlı olacağını düşünürdüm.

+2

Bir BUG benziyor. Sembolik bağları takip eden -r, sadece komut satırındaysa. Görünüşe göre, '--include' bunu kırıyor ve grep sembolik bağları takip etmeye çalışıyor. – jm666

+0

Aynı hataları, --include = *. C' (yukarıdaki ikinci alıntı satırınızdaki gibi) ve - --include = "*. C" '(yukarıdaki dördüncü alıntı satırında olduğu gibi) denediğinizde mi? Eğer değilse, shopt | grep glob' (bash kullandığınızı varsayarak)? – dg99

+0

dg99 - evet, -s anahtarını çıkarırsam, "* .c" veya * .c kullanırsam aynı hataları alırım. Ben shopt yazdığınızda | grep glob "globs" listesini alırım - hepsi kapalı. – stackbacker

cevap

1

Bu deneyebilirsiniz:

find . -type f -name "*.c" -print|xargs grep -l "F_capture" 
+1

-print'i '-print0 'olarak değiştirin ve' xargs'ı 'xargs -0' olarak değiştirin ve bu kod boşlukları destekleyecektir:' find. -type f -name "* .c" -print0 | xargs -0 grep -l "F_capture" '. Bu da bazı açıklamaları kullanabilir. –

0

aşağıdaki komutu deneyin:

grep "F_capture" `find -type f -name "*.c"`