GNU/Linux >> Linux Esercitazione >  >> Linux

Alternative più veloci da trovare e localizzare?

Ricerca di file sorgente in un progetto

Usa un comando più semplice

Generalmente, è probabile che il codice sorgente di un progetto si trovi in ​​un posto, forse in poche sottodirectory nidificate non più di due o tre profondità, quindi puoi usare un comando (possibilmente) più veloce come

(cd /path/to/project; ls *.c */*.c */*/*.c)

Utilizza i metadati del progetto

In un progetto C in genere avresti un Makefile. In altri progetti potresti avere qualcosa di simile. Questi possono essere un modo veloce per estrarre un elenco di file (e le loro posizioni) scrivere uno script che utilizza queste informazioni per individuare i file. Ho uno script "sources" in modo da poter scrivere comandi come grep variable $(sources programname) .

Velocità della ricerca

Cerca meno posti, invece di find / … usa find /path/to/project … dove possibile. Semplifica il più possibile i criteri di selezione. Utilizza le pipeline per rinviare alcuni criteri di selezione se ciò è più efficiente.

Inoltre, puoi limitare la profondità della ricerca. Per me, questo migliora molto la velocità di "trova". Puoi usare l'opzione -maxdepth. Ad esempio '-maxdepth 5'

Velocità della localizzazione

Assicurati che stia indicizzando le posizioni che ti interessano. Leggi la pagina man e utilizza tutte le opzioni appropriate per il tuo compito.

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

Elimina la necessità di cercare

Forse stai cercando perché hai dimenticato dov'è qualcosa o non ti è stato detto. Nel primo caso scrivi note (documentazione), nel secondo chiedi? Convenzioni, standard e coerenza possono aiutare molto.


Ho usato la parte "accelerare l'individuazione" della risposta di RedGrittyBrick. Ho creato un db più piccolo:

updatedb -o /home/benhsu/ben.db -U /home/benhsu/ -e "uninteresting/directory1 uninteresting/directory2"

poi puntò locate in esso:locate -d /home/benhsu/ben.db


Una tattica che utilizzo è applicare il -maxdepth opzione con find :

find -maxdepth 1 -iname "*target*"

Ripeti con profondità crescenti finché non trovi ciò che stai cercando o ti stanchi di cercare. È probabile che le prime iterazioni ritornino istantaneamente.

Questo ti assicura di non perdere tempo a guardare attraverso le profondità di enormi sotto-alberi quando è più probabile che ciò che stai cercando sia vicino alla base della gerarchia.

Ecco uno script di esempio per automatizzare questo processo (Ctrl-C quando vedi quello che vuoi):

(
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
)

Tieni presente che la ridondanza intrinseca coinvolta (ogni passaggio dovrà attraversare le cartelle elaborate nei passaggi precedenti) sarà in gran parte ottimizzata tramite la memorizzazione nella cache del disco.

Perché find non funziona hai questo ordine di ricerca come funzione integrata? Forse perché sarebbe complicato/impossibile da implementare se si presumesse che l'attraversamento ridondante fosse inaccettabile. L'esistenza di -depth option accenna alla possibilità, ma ahimè...


Linux
  1. Come cercare e rimuovere le directory in modo ricorsivo su Linux

  2. Come trovare un file in Linux

  3. Come cercare i file per dimensione ed estensione?

  4. Utilizzare Command Grep e individuare?

  5. Usa Trova e trova per cercare file in Linux

Modi per utilizzare il comando "trova" per cercare le directory in modo più efficiente

Come utilizzare Trova e individuare i comandi in Linux:una guida per principianti

Trova comando in Linux/UNIX

Come posso cercare nelle directory e trovare i file che corrispondono a regex?

Qual è la differenza tra "trova" e "trova" in Linux?

Come posso cercare un file per nome e percorso parziale?