(Saya menganggap GNU di findsini)
Menggunakan adil
find filename
akan cepat, karena itu hanya akan kembali filename, atau nama-nama di dalamnya filenamejika itu adalah direktori, atau kesalahan jika nama itu tidak ada di direktori saat ini. Ini adalah operasi yang sangat cepat, mirip dengan ls filename(tetapi rekursif jika filenamedirektori).
Sebaliknya,
find | grep filename
akan memungkinkan finduntuk menghasilkan daftar semua nama dari direktori saat ini dan di bawah, yang grepkemudian akan disaring. Ini jelas akan menjadi operasi yang jauh lebih lambat.
Saya berasumsi bahwa apa yang sebenarnya dimaksudkan itu
find . -type f -name 'filename'
Ini akan dicari filenamesebagai nama file biasa di mana saja di direktori saat ini atau di bawah.
Ini akan sama cepat (atau sebanding cepat) dengan find | grep filename, tetapi grepsolusinya akan cocok filenamedengan path lengkap dari setiap nama yang ditemukan, sama dengan apa yang -path '*filename*'akan dilakukan dengan find.
Kebingungan muncul dari kesalahpahaman tentang bagaimana cara findkerjanya.
Utilitas mengambil sejumlah jalur dan mengembalikan semua nama di bawah jalur ini.
Anda kemudian dapat membatasi nama yang dikembalikan menggunakan berbagai tes yang dapat bertindak pada nama file, path, timestamp, ukuran file, jenis file, dll.
Kapan kamu berkata
find a b c
Anda meminta finddaftar setiap nama yang tersedia di bawah tiga jalur a, bdan c. Jika ini adalah nama-nama file biasa di direktori saat ini, maka ini akan dikembalikan. Jika salah satu dari mereka kebetulan merupakan nama direktori, maka itu akan dikembalikan bersama dengan semua nama lebih lanjut di dalam direktori itu.
Kapan saya melakukannya
find . -type f -name 'filename'
Ini menghasilkan daftar semua nama di direktori saat ini ( .) dan di bawah. Kemudian itu membatasi nama-nama untuk orang-orang dari file biasa, yaitu bukan direktori dll, dengan -type f. Lalu ada batasan lebih lanjut untuk nama yang cocok filenamemenggunakan -name 'filename'. String filenamemungkin merupakan pola globbing nama file, seperti *.txt(ingatlah untuk mengutipnya!).
Contoh:
Tampaknya ini "menemukan" file yang dipanggil .profiledi direktori home saya:
$ pwd
/home/kk
$ find .profile
.profile
Tetapi pada kenyataannya, itu hanya mengembalikan semua nama di jalan .profile(hanya ada satu nama, dan itu dari file ini).
Lalu saya cdnaik satu level dan coba lagi:
$ cd ..
$ pwd
/home
$ find .profile
find: .profile: No such file or directory
The findperintah sekarang tidak dapat menemukan jalan yang disebut .profile.
Namun, jika saya mendapatkannya untuk melihat direktori saat ini, dan kemudian membatasi hanya nama yang dikembalikan.profile , ia juga menemukannya dari sana:
$ pwd
/home
$ find . -name '.profile'
./kk/.profile