Mencari file sumber dalam proyek
Gunakan perintah yang lebih sederhana
Umumnya, sumber untuk sebuah proyek cenderung berada di satu tempat, mungkin di beberapa subdirektori yang bersarang tidak lebih dari dua atau tiga dalamnya, sehingga Anda dapat menggunakan (mungkin) perintah yang lebih cepat seperti
(cd /path/to/project; ls *.c */*.c */*/*.c)
Manfaatkan metadata proyek
Dalam proyek C Anda biasanya memiliki Makefile. Di proyek lain, Anda mungkin memiliki sesuatu yang serupa. Ini bisa menjadi cara cepat untuk mengekstrak daftar file (dan lokasinya) menulis skrip yang memanfaatkan informasi ini untuk menemukan file. Saya memiliki skrip "sumber" sehingga saya dapat menulis perintah seperti grep variable $(sources programname)
.
Mempercepat pencarian
Cari lebih sedikit tempat, bukan find / …
gunakan find /path/to/project …
jika memungkinkan. Sederhanakan kriteria seleksi sebanyak mungkin. Gunakan pipeline untuk menangguhkan beberapa kriteria pemilihan jika itu lebih efisien.
Juga, Anda dapat membatasi kedalaman pencarian. Bagi saya, ini sangat meningkatkan kecepatan 'menemukan'. Anda dapat menggunakan sakelar -maxdepth. Misalnya '-maxdepth 5'
Mempercepat pencarian
Pastikan itu mengindeks lokasi yang Anda minati. Baca halaman manual dan manfaatkan opsi apa pun yang sesuai dengan tugas Anda.
-U <dir>
Create slocate database starting at path <dir>.
-d <path>
--database=<path> Specifies the path of databases to search in.
-l <level>
Security level. 0 turns security checks off. This will make
searchs faster. 1 turns security checks on. This is the
default.
Hilangkan kebutuhan untuk mencari
Mungkin Anda mencari karena Anda lupa di mana ada atau tidak diberitahu. Dalam kasus sebelumnya, tulis catatan (dokumentasi), dalam kasus terakhir, tanyakan? Konvensi, standar, dan konsistensi dapat sangat membantu.
Saya menggunakan bagian "mempercepat lokasi" dari jawaban RedGrittyBrick. Saya membuat db yang lebih kecil:
updatedb -o /home/benhsu/ben.db -U /home/benhsu/ -e "uninteresting/directory1 uninteresting/directory2"
lalu arahkan locate
itu:locate -d /home/benhsu/ben.db
Taktik yang saya gunakan adalah menerapkan -maxdepth
opsi dengan find
:
find -maxdepth 1 -iname "*target*"
Ulangi dengan kedalaman yang semakin dalam sampai Anda menemukan apa yang Anda cari, atau Anda bosan mencarinya. Beberapa iterasi pertama kemungkinan akan kembali secara instan.
Hal ini memastikan bahwa Anda tidak membuang waktu di muka untuk melihat ke dalam subpohon besar saat apa yang Anda cari kemungkinan besar berada di dekat dasar hierarki.
Berikut ini contoh skrip untuk mengotomatiskan proses ini (Ctrl-C saat Anda melihat yang Anda inginkan):
(
TARGET="*target*"
for i in $(seq 1 9) ; do
echo "=== search depth: $i"
find -mindepth $i -maxdepth $i -iname "$TARGET"
done
echo "=== search depth: 10+"
find -mindepth 10 -iname $TARGET
)
Perhatikan bahwa redundansi bawaan yang terlibat (setiap pass harus melewati folder yang diproses di pass sebelumnya) sebagian besar akan dioptimalkan melalui caching disk.
Mengapa find
tidak memiliki urutan pencarian ini sebagai fitur bawaan? Mungkin karena akan rumit/tidak mungkin diterapkan jika Anda berasumsi bahwa traversal yang berlebihan tidak dapat diterima. Keberadaan -depth
opsi mengisyaratkan kemungkinan, tapi sayangnya...