"Grep -r foo *" ve "grep -r foo."


10

Grep -r komutunu kullanırken * veya ile tüm dosyalarda arama yapabilirsiniz. ve aynı şeyi döndürüyor gibi görünüyor ama gerçekten aynı mı?

Diyelim ki "foo" için arama yapıyorum, sonra yazabilirim

grep -r foo *

veya

grep -r foo .

Herkes arasındaki farkı açıklamaya çalışır. ve *?

Yanıtlar:


15

grep -r foo *gizli dosyalarda veya dizinlerde eşleşmeleri aramaz, ayrıca *kabuk tarafından genişletilir, böylece geçerli dizinde çok fazla giriş olduğunda bir Argüman listesi çok uzun bir hatayla karşılaşabilir veya bazı dosya veya dizinlerin adı bir tire karakteriyle başlar.

Çağrının grep -r foo .yukarıdaki kusurları yok

Güncellenmiş:

Başka bir fark: grep'in man sayfası (@ fedora17) diyor ki:

-r, --recursive
    Read all files under each directory, recursively, following symbolic links only if they
    are on  the  command  line.  ...

Bu komutu boş bir dizinde yürüttüğünüzde de bir fark olacaktır:

$ grep -r foo *; echo $?
grep: *: No such file or directory
2
$ grep -r foo .; echo $?
1
$

4

Yıldız işareti kullanırsanız, adı gibi bir nokta ile başlayan dizinlerdeki dosyaları eşleştiremezsiniz .cache.

Güncelleme:

Bunun nedeni, *çağrılmadan önce kabuk tarafından genişletilmesidir grep, bu nedenle tek bir dizin adı (geçerli için .) yerine bir ad listesi alır . Desen genişleyerek kabuk (gelince kabuk parametresi özelleştirilebilir nullglob, nocaseglobya da diğer bash(ortam gibi değişkenleri seçenekleri) veya LANGveya LC_ALL)

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.