Wie finde ich den Pfad einer Datei anhand ihres Namens?

22

Ich versuche, eine settings.xmlDatei auf meinem Ubuntu-Rechner zu finden. Ich habe keine Ahnung, wo es ist und in welchem ​​Verzeichnis es sich befindet.

Ich habe versucht mit diesem -

ls -R | grep settings.xml

Aber es zeigt mir nicht den vollständigen Pfad an. Gibt es einen anderen Befehl, den ich ausprobieren muss, um den vollständigen Pfad zu erhalten?

SSH
quelle
4
Wann immer Sie denken, dass die Lösung darin besteht, die Ausgabe von zu analysieren ls, tun Sie es mit ziemlicher Sicherheit falsch .
Terdon

Antworten:

23

Für die schnelle Suche (aber nicht definitiv):

locate -br '^settings.xml$'

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

Das ^und stellen $sicher, dass nur Dateien gedruckt werden, deren Name settings.xmlund nicht Dateien, deren Namen enthalten settings.xml .

Möglicherweise müssen Sie zum ersten Mal Folgendes ausführen: updatedb(as root), um die Datenbank von zu aktualisieren / zu erstellen locate.

user.dz
quelle
@terdon, du hast mich überrascht, ich habe noch nie darüber nachgesehen man locate!!! vorausgesetzt es ist nur ein einfaches Suchwerkzeug. Vielen Dank.
user.dz
Ja, das war so ziemlich meine Reaktion, als ich die Manpage zum ersten Mal las :)
terdon
4
es ist erwähnenswert , welche rolle updatedbdieser befehl spielt - locateohne den scheitert er für mich sowieso oft
rm-vanda
@ rm-vanda, ich habe die Antwort aktualisiert, um zu erwähnen updatedb. Vielen Dank.
user.dz
4
locate '*/settings.xml'ist wahrscheinlich portabler unter den verschiedenen Implementierungen von locate(sofern verfügbar).
Stéphane Chazelas
15

Eine langsame, aber stetige Suche durch das Dateisystem, aber definitiv.

find / -xdev -name settings.xml

Es wird einige Zeit dauern und es kann sein, dass Sie einige Berechtigungsfehler bekommen, aber es wird dort ankommen. Wenn Sie mehr wissen, wo es sich befindet, ändern Sie das erste Verzeichnis von /nach/where/you/guess

X Tian
quelle
4
Das Anhängen 2>/dev/nullan das Ende des Befehls unterdrückt die gesamte Fehlerausgabe (indem stderr an das Null-Gerät umgeleitet wird).
Tanner Swett
2
-xdev: Keine Verzeichnisse auf anderen Dateisystemen absteigen.
Pablo A
1

Beispiel:

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

Baum ist ein weiterer guter Weg, wenn Sie nicht genau wissen, wonach Sie suchen, und es scheint ein bisschen schneller zu sein:

tree -f / | grep settings.xml

Andere nützliche Flags: -ion grep ignoriert den Fall, -hfür Menschen lesbar auf Baum -

- Die Manpage hat viele nützliche Optionen -!

rm-vanda
quelle
6
Keine gute Idee, tree(1)zeigt einen ASCII-Art-Baum der Dateien, der dann von verstümmelt wird grep(1).
Vonbrand
1
Ja, wenn Sie verwenden möchten tree, können Sie auch verwenden, find . type -fwas schneller sein wird.
Terdon
0

Die -la-Parameter geben auch die lange Version von ls und die Verzeichnisse aus. ls -la | grep settings.xml

Eugenio F. Martinez Pacheco
quelle
2
Dies würde Ihnen immer noch nicht den vollständigen Pfad zu der angegebenen Datei geben.
Kusalananda