GNU/Linux >> Belajar Linux >  >> Linux

Alternatif yang lebih cepat untuk ditemukan dan ditemukan?

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...


Linux
  1. Temukan File dengan Perintah Temukan dan Temukan di Linux

  2. Apa perbedaan antara perintah locate dan find di Linux?

  3. Bagaimana cara Menggabungkan find dan grep untuk pencarian yang kompleks? ( GNU/linux, temukan, grep )

  1. Alternatif Pgrep Dan Pkill Di Mac Os X?

  2. Apa perbedaan antara 'temukan' dan 'temukan' di Linux?

  3. Bagaimana saya bisa mencari file dengan nama dan jalur parsialnya?

  1. Temukan Pola Dan Pindahkan?

  2. Temukan dan salin file

  3. Temukan dan ganti nama direktori