( findBurada GNU olduğunu varsayıyorum )
Sadece
find filename
olur sadece dönecekti, çünkü hızlı olmak filename, veya içinde isimler filenamebu ismi geçerli dizinde olmasaydı bu bir dizin veya bir hata yoksa. Çok hızlı bir işlemdir ls filename(ancak bir dizinse özyinelemeli filename).
Tersine,
find | grep filename
geçerli dizinden ve altındaki tüm adların findbir listesini oluşturmaya izin verir ve bu da filtrelenir. Açıkçası bu çok daha yavaş bir işlem olacaktır.grep
Ben ne olduğunu tahmin ediyorum aslında amaçlanan oldu
find . -type f -name 'filename'
Bu filename, geçerli dizinde veya altında herhangi bir yerde normal bir dosyanın adı olarak görünür .
Bu, hızlı (veya nispeten hızlı) olacaktır find | grep filename, ancak grepçözüm filename, her bir adın tam yoluyla, ne -path '*filename*'yapacağına benzer şekilde eşleşecektir find.
Karışıklık, nasıl findçalıştığının yanlış anlaşılmasından kaynaklanıyor .
Yardımcı program birkaç yol alır ve bu yolların altındaki tüm adları döndürür.
Ardından , dosya adı, yol, zaman damgası, dosya boyutu, dosya türü vb. Üzerinde etkili olabilecek çeşitli sınamalar kullanarak döndürülen adları kısıtlayabilirsiniz .
Dediğinde
find a b c
Sormak findüç yolları altında kullanılabilir her ismi listelemek için a, bve c. Bunlar geçerli dizindeki normal dosyaların adlarıysa, bunlar döndürülür. Bunlardan herhangi biri bir dizinin adı olursa, o dizindeki diğer tüm adlarla birlikte döndürülür.
Ben yaparken
find . -type f -name 'filename'
Bu, geçerli dizindeki ( .) ve altındaki tüm adların bir listesini oluşturur . Daha sonra adları normal dosyalarla, yani dizinlerle vb. İle kısıtlar -type f. Sonra filenamekullanarak eşleşen isimleri için bir kısıtlama daha var -name 'filename'. Dize filenamebir dosya adı globbing deseni olabilir, *.txt(sadece alıntı yapmayı unutmayın!).
Misal:
Aşağıdakiler .profileana dizinimde çağrılan dosyayı "buluyor" gibi görünüyor :
$ pwd
/home/kk
$ find .profile
.profile
Ama aslında, yoldaki tüm isimleri döndürür .profile(sadece bir isim vardır ve bu dosyadadır).
Sonra cdbir seviye yukarı ve tekrar deneyin:
$ cd ..
$ pwd
/home
$ find .profile
find: .profile: No such file or directory
findKomut şimdi denilen herhangi yolu bulamıyor .profile.
Ancak, geçerli dizine bakmak ve sonra döndürülen adları yalnızca kısıtlamak için.profile alırsanız , oradan da bulur:
$ pwd
/home
$ find . -name '.profile'
./kk/.profile