GNU/Linux >> Tutoriels Linux >  >> Linux

Des alternatives plus rapides pour trouver et localiser ?

Rechercher des fichiers source dans un projet

Utiliser une commande plus simple

Généralement, la source d'un projet est susceptible de se trouver à un seul endroit, peut-être dans quelques sous-répertoires imbriqués pas plus de deux ou trois de profondeur, vous pouvez donc utiliser une commande (éventuellement) plus rapide telle que

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

Utilisez les métadonnées du projet

Dans un projet C, vous auriez généralement un Makefile. Dans d'autres projets, vous pouvez avoir quelque chose de similaire. Ceux-ci peuvent être un moyen rapide d'extraire une liste de fichiers (et leurs emplacements) écrire un script qui utilise ces informations pour localiser les fichiers. J'ai un script "sources" pour pouvoir écrire des commandes comme grep variable $(sources programname) .

Accélération de la recherche

Rechercher moins de lieux, au lieu de find / … utilisez find /path/to/project … lorsque c'est possible. Simplifiez au maximum les critères de sélection. Utilisez des pipelines pour différer certains critères de sélection si cela est plus efficace.

En outre, vous pouvez limiter la profondeur de la recherche. Pour moi, cela améliore beaucoup la vitesse de « recherche ». Vous pouvez utiliser le commutateur -maxdepth. Par exemple '-maxdepth 5'

Accélérer la localisation

Assurez-vous qu'il indexe les emplacements qui vous intéressent. Lisez la page de manuel et utilisez les options appropriées à votre tâche.

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

Supprimez le besoin de recherche

Peut-être que vous cherchez parce que vous avez oublié où se trouve quelque chose ou qu'on ne vous l'a pas dit. Dans le premier cas, écrivez des notes (documentation), dans le second, demandez ? Les conventions, les normes et la cohérence peuvent beaucoup aider.


J'ai utilisé la partie "accélérer la localisation" de la réponse de RedGrittyBrick. J'ai créé une base de données plus petite :

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

puis pointé locate à elle :locate -d /home/benhsu/ben.db


Une tactique que j'utilise est d'appliquer le -maxdepth option avec find :

find -maxdepth 1 -iname "*target*"

Répétez avec des profondeurs croissantes jusqu'à ce que vous trouviez ce que vous cherchez ou que vous en ayez assez de chercher. Les premières itérations sont susceptibles de revenir instantanément.

Cela garantit que vous ne perdez pas de temps à parcourir les profondeurs de sous-arborescences massives lorsque ce que vous recherchez est plus susceptible de se trouver près de la base de la hiérarchie.

Voici un exemple de script pour automatiser ce processus (Ctrl-C quand vous voyez ce que vous voulez) :

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

Notez que la redondance inhérente impliquée (chaque passe devra parcourir les dossiers traités lors des passes précédentes) sera largement optimisée grâce à la mise en cache du disque.

Pourquoi find ne avez cet ordre de recherche comme fonctionnalité intégrée ? Peut-être parce que ce serait compliqué/impossible à mettre en œuvre si vous supposiez que la traversée redondante était inacceptable. L'existence du -depth l'option laisse entrevoir la possibilité, mais hélas...


Linux
  1. Comment rechercher et supprimer des répertoires de manière récursive sous Linux

  2. Recherche insensible à la casse des noms de fichiers en double ?

  3. Trouver un modèle et déplacer ?

  4. Rechercher un fichier avec les commandes Rechercher et Localiser sous Linux

  5. Utilisez Find and Locate pour rechercher des fichiers sous Linux

Façons d'utiliser la commande "find" pour rechercher des répertoires plus efficacement

Comment utiliser les commandes de recherche et de localisation sous Linux :Guide du débutant

Rechercher la commande sous Linux/UNIX

Comment combiner find et grep pour une recherche complexe ? ( GNU/linux, trouver, grep )

Quelle est la différence entre "localiser" et "trouver" sous Linux ?

Comment puis-je rechercher un fichier par son nom et son chemin partiel ?