Comment trouver le chemin d'un fichier en fonction de son nom?


22

J'essaie de trouver un settings.xmlfichier sur ma machine Ubuntu. Je n'ai aucune idée où il se trouve et dans quel répertoire il se trouve.

J'ai essayé d'utiliser ça -

ls -R | grep settings.xml

Mais cela ne me montre pas le chemin complet où il se trouve. Existe-t-il une autre commande que je dois essayer qui peut me donner le chemin complet?


4
Chaque fois que vous pensez que la solution consiste à analyser la sortie de ls, vous le faites presque certainement dans le mauvais sens .
terdon

Réponses:


23

Pour une recherche rapide (mais non définitive):

locate -br '^settings.xml$'

De man locate:

   locate  reads  one or more databases prepared by updatedb(8) and writes
   file names matching at least one of the PATTERNs  to  standard  output,
   one per line.

   -b, --basename
          Match  only  the base name against the specified patterns.  This
          is the opposite of --wholename.
   -r, --regexp REGEXP
          Search for a basic regexp REGEXP.  No PATTERNs  are  allowed  if
          this  option  is used, but this option can be specified multiple
          times.

Le ^et $veiller à ce que seuls les fichiers dont le nom est settings.xmlet non pas les fichiers dont les noms contiennent settings.xml seront imprimés.

Vous devrez peut-être pour la première fois exécuter: updatedb(as root) pour mettre à jour / construire la base de données de locate.


@terdon, vous m'avez surpris, je n'ai jamais pensé à regarder man locateavant !!! en supposant qu'il s'agit d'un simple outil de recherche. Merci beaucoup.
user.dz

Oui, c'était à peu près ma réaction la première fois que j'ai lu la page de manuel :)
terdon

4
il convient de noter le rôle de updatedbcette commande - locateéchoue souvent sans cela, pour moi, de toute façon
rm-vanda

@ rm-vanda, j'ai mis à jour la réponse à mentionner updatedb. Merci.
user.dz

4
locate '*/settings.xml'est probablement plus portable parmi les différentes implémentations de locate(le cas échéant).
Stéphane Chazelas

15

Une recherche lente mais régulière à travers le système de fichiers, mais définitive.

find / -xdev -name settings.xml

Cela prendra un certain temps et vous obtiendrez peut-être des erreurs d'autorisation, mais cela y arrivera. Si vous avez une idée de l'endroit où il se trouve, changez le premier répertoire de /à/where/you/guess


4
L'ajout 2>/dev/nullà la fin de la commande supprimera toute la sortie d'erreur (en redirigeant stderr vers le périphérique nul).
Tanner Swett

2
-xdev: Ne descendez pas de répertoires sur d'autres systèmes de fichiers.
Pablo A

1

Exemple:

$ locate settings.xml
/usr/share/mime/application/x-cisco-vpn-settings.xml

0

l'arbre est un autre bon moyen, si vous ne savez pas exactement ce que vous cherchez, et il semble être un peu plus rapide:

tree -f / | grep settings.xml

Autres indicateurs utiles: -isur grep ignorera le cas, -hpour être lisible par l'homme sur l'arbre -

- la page de manuel a beaucoup d'options utiles -!


6
Pas une bonne idée, tree(1)montre un arbre ASCII-art des fichiers, qui est ensuite mutilé par grep(1).
vonbrand

1
Oui, si vous allez utiliser tree, vous pouvez tout aussi bien utiliser find . type -fce qui sera plus rapide.
terdon

0

Les paramètres -la affichent également la version longue de ls et les répertoires. ls -la | grep settings.xml


2
Cela ne vous donnerait toujours pas le chemin d'accès complet au fichier donné.
Kusalananda
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.