( find
Burada GNU olduğunu varsayıyorum )
Sadece
find filename
olur sadece dönecekti, çünkü hızlı olmak filename
, veya içinde isimler filename
bu 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 find
bir 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
, b
ve 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 filename
kullanarak eşleşen isimleri için bir kısıtlama daha var -name 'filename'
. Dize filename
bir dosya adı globbing deseni olabilir, *.txt
(sadece alıntı yapmayı unutmayın!).
Misal:
Aşağıdakiler .profile
ana 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 cd
bir seviye yukarı ve tekrar deneyin:
$ cd ..
$ pwd
/home
$ find .profile
find: .profile: No such file or directory
find
Komut ş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