C'è un modo per aumentare la velocità di "ricerca"


15

Mi chiedo c'è un modo per aumentare la findvelocità nel terminale, non ha senso che l'uso di google su Internet per la ricerca avrà una velocità migliore rispetto a una ricerca locale di stringhe o solo nomi di file.

Mi chiedo c'è un modo per avere una base di indicizzazione locale, una volta costruita, in futuro il comando find potrebbe essere super veloce.

O altri suggerimenti?

Grazie!


Puoi modificare il tuo post con il tuo sistema operativo e / o distribuzione?
Jodie C,

Risposte:


15

Prova a usare locate, dovrebbe fare quello che vuoi.


13
Di solito è una buona idea approfondire un po 'di più la risposta. Come menzionare da quale pacchetto locateviene (di solito slocate) e da usare updatedbper ricostruire il DB. :-)
Patrick,

1
Questo non funziona per le partizioni con l'indicizzazione disattivata. Ad esempio, le partizioni NTFS soffrono di cattive prestazioni se l'indicizzazione è abilitata, quindi individuare non funzionerà per quelli "come dovrebbe".
ojrask,

9

Dipende molto dal tuo criterio di ricerca.

Se cerchi nomi di file o modelli di nome file, individuare è molto più veloce, ma non adatto a file appena generati, poiché l'indice utilizzato viene normalmente aggiornato solo una volta al giorno. Ma se puoi usarlo, è super veloce.

Ma con find puoi cercare la dimensione del file, l'età del file e altre cose, che non sono ricercabili da individuare.

Se sai dove cercare, puoi utilizzare il percorso per delimitare l'ambito di ricerca:

find /some/path -size -10M -size +2M -mtime -365 ...

cercherebbe solo file da 2 a 10 M, massimo 1 anno in / some / path.

I programmi, disponibili nel percorso possono essere cercati tramite i quali, help, lib e file di configurazione con whereis. Esempi:

which java
/usr/bin/java

whereis firefox 
firefox: /usr/bin/firefox /etc/firefox /usr/lib/firefox /usr/share/firefox /usr/share/man/man1/firefox.1.gz

7

Uso locate

Il motivo è che locateutilizza un database di tutte le directory e i file esistenti che è già stato creato proprio come immaginavi!
http://linux.about.com/od/commands/l/blcmdl5_locatedb.htm

Ad un certo intervallo impostato (e modificabile), un lavoro in esecuzione esegue la scansione del file system e quindi crea un database con esso. È quindi questo database (trovab), con i suoi indici appropriati, che il locatecomando va contro invece di scansionare il disco rigido in quel punto.

Quindi il lato positivo è che è molto veloce rispetto a una scansione del disco rigido. Il rovescio della medaglia è che il database di individuazione (locatedb) non è "attivo", quindi può essere utilizzato solo per i file che esistevano "a partire da" l'ultima scansione.

Per aggiornare localb ora esegui updatedb(o sudo updatedbse necessario)

tra l'altro ho appena eseguito sudo updatedblocalmente e ci sono voluti 3 1/2 secondi! Ho 31.000 file.


1

Come altri hanno sottolineato, individuare può essere uno strumento migliore per la ricerca più semplice.

Tuttavia, per ricerche più complesse probabilmente sei bloccato con find.

Un modo per velocizzare la ricerca è restringere la directory in cui si trovano i tuoi file invece di cercare in tutta la directory principale.


0

per una singola operazione di ricerca; Non ho trovato alcun aumento di velocità; a meno che non cerchi di restringere la ricerca utilizzando le findopzioni.

Tuttavia; se si desidera eseguire più findoperazioni sullo stesso set di file ; Ho avuto un notevole aumento di velocità popolando un file temporaneo con tutti i nomi di file e usando grep. Ovviamente ciò non tiene conto dei file aggiunti o eliminati.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.