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 *.pyc
alıntılanmış gibi davranır .
İdeal olarak, bir glob alıntı yapmalısınız:
find . -name '*.pyc' -delete
Kabuğunuz find
komutu 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 *.pyc
her 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.
find
adlandırılan bir bölümNON-BUGS
ve neden gerekli olduğuna ilişkin bir açıklama bulunmalıdır .