Aşağıdaki komutu çalıştırmaya çalışıyorum:
find a/folder b/folder -name *.c -o -name *.h -exec grep -I foobar '{}' +
Bu bir hata döndürüyor:
find: missing argument to -exec
Man sayfasıyla eşleştiği gibi, bu komutta neyin yanlış olduğunu göremiyorum:
-exec komutu {} +
-Exec seçeneğinin bu değişkeni, seçilen dosyalarda belirtilen komutu çalıştırır, ancak komut satırı, seçilen her dosya adı sonuna eklenerek oluşturulur; komutun toplam çağrı sayısı, eşleşen dosya sayısından çok daha az olacaktır. Komut satırı, xargs'ın komut satırlarını oluşturduğu gibi oluşturulur. Komutta yalnızca bir {{} örneğine izin verilir. Komut başlangıç dizininde yürütülür.
Ayrıca denedim:
find a/folder b/folder -name *.c -o -name *.h -exec grep -I foobar {} +
find a/folder b/folder -name *.c -o -name *.h -exec 'grep -I foobar' {} +
find a/folder b/folder -name *.c -o -name *.h -exec 'grep -I foobar' '{}' +
find a/folder b/folder -name "*.c" -o -name "*.h" -exec grep -I foobar '{}' +
find a/folder b/folder \( -name *.c -o -name *.h \) -exec grep -I foobar '{}' +
find a/folder b/folder -name *.c -o -name *.h -exec grep -I foobar '{}' \+
find
. -exec cmd {} +
Varyant POSIX olmasına ve 80'lerden beri mevcut olmasına rağmen , GNU bulguyu sadece (nispeten) yakın zamanda ekledi (2005). find --version
Size ne anlatıyor?
-exec {} +
Daha eski GNU bulgularında, -print0 | xargs -r0
benzer bir şey elde etmek için (POSIX dışı) kullanabilirsiniz. 4.1
1994 dan
-name
desen argümanlar alıntı edilmelidir: -name "*.c" -o -name "*.h"
. -exec
Hatayla ilgisi olmasa da bu doğrudur . Diğer tüm cevapların joker karakterleri tırnak içine aldığını fark edeceksiniz, ancak sadece Gilles bundan bahsediyor. ... (devamı)
-name "*.[ch]"
açıklama yapmadan daraltır . Bu, komut satırını basitleştirmenin ve özellikle -o
. İçeren ifadeleri -o
doğru bulmak zordur. Seninki yanlış; Komutunuz hata vermeyecek şekilde sabitlenmişse (Gilles'in cevabında olduğu gibi), grep
yalnızca .h
dosyalarda çalışır. Yapmanız gerek '(' -name '*.c' -o -name '*.h' ')'
.
+
Sonunda kaçmayı denedin mi?find a/folder b/folder -name *.c -o -name *.h -exec grep -I foobar '{}' \+