Bu komutta:
find . -name \*.pyc -delete
Neden daha önce ters eğik çizgi gerekiyor *.pyc?
Bu komutta:
find . -name \*.pyc -delete
Neden daha önce ters eğik çizgi gerekiyor *.pyc?
Yanıtlar:
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
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.pycbar.pycSonra *.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.
findadlandırılan bir bölümNON-BUGSve neden gerekli olduğuna ilişkin bir açıklama bulunmalıdır .