"Bul" daki yıldız işareti neden ters eğik çizgi?


9

Bu komutta:

find . -name \*.pyc -delete

Neden daha önce ters eğik çizgi gerekiyor *.pyc?


İçin man sayfasında örnek olarak benzer bir şeyle findadlandırılan bir bölüm NON-BUGSve neden gerekli olduğuna ilişkin bir açıklama bulunmalıdır .
Brian

Yanıtlar:


19

Alıntı yapılmayan bir küre, yürütmeden önce kabuk tarafından genişletilir find. ( Kılavuzdaki Dosya Adı Genişletme bölümüne bakın .)

Yani:

find . -name *.pyc -delete

aslında:

find . -name file1.pyc file2.pyc file3.pyc -delete

geçerli dizinde 3 .pyc dosyası olduğunu varsayarsak bunun yerine bir hatayla sonuçlanır.

Ters eğik çizgi, kabuğun glob'a geçmesini sağlar find, yani *.pycalıntılanmış gibi davranır .

İdeal olarak, bir glob alıntı yapmalısınız:

find . -name '*.pyc' -delete

@RamRachum, ancak yazarken daha fazla karakter.
Paul Draper

1
@PaulDraper Okunabilir ve hatalara daha az eğilimli> Bir tuşa
basarak kısalın

Tek tırnak işareti yoludur. Ters eğik çizgiyi bu şekilde kullanabileceğinizi hiç düşünmemiştim ...
Floris

4

Kabuğunuz findkomutu vermeden önce çeşitli genişletmeler yapacaktır . Bunu yaparak, özel karakterler (veya özel anlamı olan karakterler) de *işleyebilir , burada bir joker karakter - bir globbing karakteri. Bu, dosya adı genişletmesi olarak adlandırılır.

Dizininizde iki dosyanız olduğunu varsayalım:

  • foo.pyc
  • bar.pyc

Sonra *.pycher iki isme de genişlerdi. Eğer yazarsanız:

find . -name *.pyc -delete

o zaman kabuk gerçekten arayacaktır:

find . -name foo.pyc bar.pyc -delete

bu çok mantıklı değil, çünkü sadece bir argümanınız olabilir -name. Bu yüzden kabuk tarafından yorumlanmasını önlemek için özel karakterden kaçmanız gerekir. Bunu ters eğik çizgiden kaçarak veya alternatif olarak alıntı yaparak yapabilirsiniz.

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.