Linux findet Dateinamen mit vorgegebener Zeichenfolge

107

Ich bin auf Ubuntu und möchte alle Dateien im aktuellen Verzeichnis und in den Unterverzeichnissen finden, deren Name die Zeichenfolge "John" enthält. Ich weiß, dass grepdas mit dem Inhalt in den Dateien übereinstimmen kann, aber ich habe keine Ahnung, wie ich es mit Dateinamen verwenden soll. Jede Hilfe wäre dankbar.

JJ Beck
quelle

Antworten:

195

Verwenden Sie den Befehl find ,

find . -type f -name "*John*"
Rich Adams
quelle
1
Wenn Sie ein benutzerdefiniertes Bash-Skript mit #!/bin/bash if [ -z $1 ]; then echo "Error: Specify pattern for search"; else /usr/bin/find . -type f -name "*$1*"; fi erstellen, können Sie es einfach F search-stringals perfekte Verknüpfung ausführen
Ilia Rostovtsev
@IliaRostovtsev - schön, [ -z "$1" ]wäre aber etwas besser.
Joe
@ Joe Ah, richtig. Du meinst, falls ein Pfad Leerzeichen hat? Aber hier prüfen wir nur, ob das Vorhandensein von $ 1 Leerzeichen $ 2 erscheinen lässt, und das war's. Du meinst, es ist theoretisch besser, oder?
Ilia Rostovtsev
@IliaRostovtsev - Eigentlich habe ich mich geirrt. Wenn $ 1 null ist, wird der Test if [ -z ]. Ich dachte, das wäre ein Syntaxfehler, aber es funktioniert. Ich kann von nun an einen Teil meines Codes vereinfachen.
Joe
25

Eine korrekte Antwort wurde bereits geliefert, aber damit Sie lernen, wie Sie sich selbst helfen können, dachte ich, ich würde etwas Hilfreiches auf andere Weise einwerfen. Wenn Sie in einem Wort zusammenfassen können, was Sie erreichen möchten, gibt es unter Linux eine sehr gute Hilfe.

man -k <your search term>

Dazu werden alle Befehle mit Ihrem Suchbegriff in der Kurzbeschreibung aufgelistet. Es besteht normalerweise eine ziemlich gute Chance, dass Sie finden, wonach Sie suchen . ;)

Diese Ausgabe kann manchmal etwas überwältigend sein, und ich würde empfehlen, sie auf die ausführbaren Dateien und nicht auf alle verfügbaren Manpages zu beschränken:

man -k find | egrep '\(1\)'

oder, wenn Sie auch nach Befehlen suchen möchten, für die höhere Berechtigungsstufen erforderlich sind:

man -k find | egrep '\([18]\)'
basteln
quelle
3
Ich bin neugierig ... eine Frage, die keinen Versuch zeigt, das vorliegende Problem über eine Suche zu lösen, wird positiv bewertet. Eine freundliche Erklärung, wie man sich über mögliche Befehle informiert, wird beantwortet. Was sind die Kriterien? :)
tink
1
Ich habe dich gestimmt. Lektion ist nur wenige können es bemannen. aber wir können Beispiele sehen und anpassen :)
tgkprog
2

Der findBefehl dauert lange, da er echte Dateien im Dateisystem scannt.

Der schnellste Weg ist die Verwendung eines locateBefehls, der sofort ein Ergebnis liefert:

locate "John"

Wenn der Befehl nicht gefunden wird, müssen Sie zuerst das mlocatePaket installieren und den updatedbBefehl ausführen , um die Suchdatenbank zum ersten Mal vorzubereiten.

Weitere Details finden Sie hier: https://medium.com/@thucnc/the-fastest-way-to-find-files-by-filename-mlocate-locate-commands-55bf40b297ab

thucnguyen
quelle
1

Verwenden Sie ack es ist einfach. Schreib einfachack <string to be searched>

Annu
quelle
Es scheint, dass dies auch alle Pfade umfasst, die den Suchtext
underscore_d
1

Dies ist eine sehr einfache Lösung mit dem treeBefehl in dem Verzeichnis, nach dem Sie suchen möchten. -fZeigt den vollständigen Dateipfad an und |leitet die Ausgabe des Baums weiter grep, um die Datei zu finden, die die Zeichenfolge filenameim Namen enthält.

tree -f | grep filename
Caylus
quelle