(Saya menganggap GNU di find
sini)
Menggunakan adil
find filename
akan cepat, karena itu hanya akan kembali filename
, atau nama-nama di dalamnya filename
jika 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 filename
direktori).
Sebaliknya,
find | grep filename
akan memungkinkan find
untuk menghasilkan daftar semua nama dari direktori saat ini dan di bawah, yang grep
kemudian 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 filename
sebagai 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 grep
solusinya akan cocok filename
dengan path lengkap dari setiap nama yang ditemukan, sama dengan apa yang -path '*filename*'
akan dilakukan dengan find
.
Kebingungan muncul dari kesalahpahaman tentang bagaimana cara find
kerjanya.
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 find
daftar setiap nama yang tersedia di bawah tiga jalur a
, b
dan 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 filename
menggunakan -name 'filename'
. String filename
mungkin merupakan pola globbing nama file, seperti *.txt
(ingatlah untuk mengutipnya!).
Contoh:
Tampaknya ini "menemukan" file yang dipanggil .profile
di 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 cd
naik satu level dan coba lagi:
$ cd ..
$ pwd
/home
$ find .profile
find: .profile: No such file or directory
The find
perintah 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