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.


Antworten:


195

Verwenden Sie den Befehl find ,

find . -type f -name "*John*"

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]\)'

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


1

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


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
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.