Inhaltsverzeichnis
2. Grammatische Form und gemeinsame Parameter
Wenn wir Linux verwenden, ist einer der Befehle, die wir häufig zum Suchen von Dateien verwenden, find. Das Verständnis der Funktion und Verwendung von find kann die Arbeitseffizienz verbessern. Im Folgenden wird die Verwendung von find anhand spezifischer Beispiele beschrieben.
1. Grundbegriffe
Der Befehl find wird verwendet, um Dateien (die sich auf normale Dateien und Verzeichnisse beziehen) im angegebenen Verzeichnis und in den angegebenen Unterverzeichnissen zu suchen .
2. Grammatische Form und gemeinsame Parameter
2.1 Grammatische Form
finde [Pfad ...] [Ausdruck]
Unter diesen ist Pfad der Suchpfad, und mehrere Pfade sind durch Leerzeichen getrennt. Ausdruck: besteht aus Optionen und Aktionen.
2.2 Gemeinsame Parameter
-name pattern: Finde Dateien gemäß dem angegebenen Muster;
-iname pattern: Wie der Parameter -name besteht der Unterschied darin, dass die Groß- und Kleinschreibung nicht berücksichtigt wird.
-Typ c: Finde Dateien nach Dateityp c;
Unter diesen: c repräsentiert den Dateityp, die möglichen Werte sind:
d: Verzeichnis;
f: gewöhnliche Datei;
l: symbolische Verbindung;
s: Steckdose;
c: Sonderzeichendatei;
b: spezielle Blockdatei;
p: Befehlspipeline (FIFO)
-ctime n: Dateien finden, die in den letzten n Tagen geändert wurden;
-neuere Datei: Finde Dateien, die neuer als die Datei sind ("Update": bezieht sich auf die Änderungszeit);
-exec commond {} \;: Führen Sie den in diesem Parameter aufgeführten Shell-Befehl in der gefundenen Datei aus. Achten Sie auf ein Leerzeichen zwischen {} und \;
-ok commond {} \;: Die Funktion und der Parametermodus sind mit -exec identisch, aber jedes Mal, wenn commond ausgeführt wird, wird der Benutzer gefragt, ob er ausgeführt werden soll. Geben Sie J / N zur Auswahl ein.
Drei, Beispielerklärung
3.1 -name / -iname Parameter
Erstellen Sie zuerst die Datei readme.md im aktuellen Verzeichnis und suchen Sie dann die Datei, deren Name mit dem Muster "* README.md" übereinstimmt.
[root@localhost go]# touch readme.md
[root@localhost go]# find . -name "*README.md"
./README.md
./misc/trace/README.md
./src/cmd/compile/README.md
./src/cmd/compile/internal/ssa/README.md
./src/cmd/vendor/github.com/google/pprof/third_party/d3/README.md
./src/cmd/vendor/github.com/ianlancetaylor/demangle/README.md
./src/cmd/vendor/golang.org/x/sys/unix/README.md
./test/README.md
[root@localhost go]#
Wie Sie dem obigen Beispiel entnehmen können, werden alle Dateien gefunden, die dem Muster "* README.md" entsprechen, aber die Kleinbuchstaben-Datei readme.md wird nicht gefunden. Schauen wir uns das Ergebnis des Ersetzens des Parameters -iname an:
[root@localhost go]# find . -iname "*ME.md"
./README.md
./misc/trace/README.md
./src/cmd/compile/README.md
./src/cmd/compile/internal/ssa/README.md
./src/cmd/vendor/github.com/google/pprof/third_party/d3/README.md
./src/cmd/vendor/github.com/ianlancetaylor/demangle/README.md
./src/cmd/vendor/golang.org/x/sys/unix/README.md
./test/README.md
./readme.md
[root@localhost go]#
Wie Sie sehen können, wurde auch die Kleinbuchstaben-Datei readme.md gefunden. Dies ist der Unterschied zwischen -name und -iname.
PS: Unter Linux bedeutet der Parameter i häufig, dass bei dem Befehl nicht zwischen Groß- und Kleinschreibung unterschieden wird.
Parameter vom Typ 3.2
Suchen Sie alle Verzeichnisse mit dem Namen "* src".
[root@localhost go]# find . -type d -name "*src"
./src
./src/cmd/api/testdata/src
./src/cmd/go/testdata/modlegacy/src
./src/cmd/internal/src
./src/cmd/link/testdata/testPErsrc
./src/go/build/testdata/withvendor/src
[root@localhost go]#
Wie Sie dem obigen Beispiel entnehmen können, werden alle Verzeichnisse angezeigt, die dem Muster "* src" entsprechen, und es werden keine normalen Dateien aufgelistet, die die Bedingungen erfüllen.
Suchen Sie alle Dateien mit dem Namen "* src".
[root@localhost go]# find . -type f -name "*src"
./src/cmd/compile/internal/syntax/testdata/issue20789.src
./src/cmd/compile/internal/syntax/testdata/issue23385.src
./src/cmd/compile/internal/syntax/testdata/issue23434.src
./src/cmd/compile/internal/syntax/testdata/issue31092.src
./src/cmd/compile/internal/syntax/testdata/sample.src
./src/go/parser/testdata/commas.src
./src/go/parser/testdata/issue11377.src
./src/go/parser/testdata/issue23434.src
……
Wie aus dem obigen Beispiel ersichtlich ist, wurden alle normalen Dateien gefunden, die dem Muster "* src" entsprechen, ohne Verzeichnisse.
3.3 -ctime Parameter
Erstellen Sie zunächst die testCtime-Datei unter / var / account und suchen Sie dann im aktuellen Verzeichnis nach den am letzten Tag geänderten Dateien.
[root@localhost account]# ls
pacct
[root@localhost account]# touch testCtime
[root@localhost account]# find . -ctime -1
.
./testCtime
[root@localhost account]#
Wie Sie oben sehen können, wurden sowohl "." Als auch testCtime gefunden, wobei "." Das aktuelle Verzeichnis darstellt.
3.4 -cnewer Parameter
Erstellen Sie zunächst zwei Dateien testOne und testTwo und anschließend ein Verzeichnis testdir, um neuere Dateien als testOne zu finden.
[root@localhost go]# touch testOne
[root@localhost go]# touch testTwo
[root@localhost go]# mkdir testdir
[root@localhost go]# find . -cnewer testOne
.
./testTwo
./testdir
[root@localhost go]#
Wie aus den obigen Abfrageergebnissen hervorgeht, können Dateien, die neuer als testOne sind, abgefragt werden .
3.5 -exec / -ok Parameter
Suchen Sie im aktuellen Verzeichnis und in den Unterverzeichnissen nach Dateien, die dem Muster "README.md" entsprechen, und führen Sie den Befehl ls -l für die Ergebnisse aus.
[root@localhost go]# find . -name "README.md" -exec ls -l {} \;
-rw-r--r--. 1 root root 1607 9月 10 00:57 ./README.md
-rw-r--r--. 1 root root 5066 9月 10 00:57 ./misc/trace/README.md
-rw-r--r--. 1 root root 5655 9月 10 00:57 ./src/cmd/compile/README.md
-rw-r--r--. 1 root root 7945 9月 10 00:57 ./src/cmd/compile/internal/ssa/README.md
-rw-r--r--. 1 root root 2834 9月 10 00:57 ./src/cmd/vendor/github.com/google/pprof/third_party/d3/README.md
-rw-r--r--. 1 root root 98 9月 10 00:57 ./src/cmd/vendor/github.com/ianlancetaylor/demangle/README.md
-rw-r--r--. 1 root root 8678 9月 10 00:57 ./src/cmd/vendor/golang.org/x/sys/unix/README.md
-rw-r--r--. 1 root root 577 9月 10 00:57 ./test/README.md
[root@localhost go]#
Ändern Sie wie oben den Parameter von -exec in -ok und führen Sie ihn wie folgt aus:
[root@localhost go]# find . -name "README.md" -ok ls -l {} \;
< ls ... ./README.md > ? y
-rw-r--r--. 1 root root 1607 9月 10 00:57 ./README.md
< ls ... ./misc/trace/README.md > ? y
-rw-r--r--. 1 root root 5066 9月 10 00:57 ./misc/trace/README.md
< ls ... ./src/cmd/compile/README.md > ? y
-rw-r--r--. 1 root root 5655 9月 10 00:57 ./src/cmd/compile/README.md
< ls ... ./src/cmd/compile/internal/ssa/README.md > ? y
-rw-r--r--. 1 root root 7945 9月 10 00:57 ./src/cmd/compile/internal/ssa/README.md
< ls ... ./src/cmd/vendor/github.com/google/pprof/third_party/d3/README.md > ? y
-rw-r--r--. 1 root root 2834 9月 10 00:57 ./src/cmd/vendor/github.com/google/pprof/third_party/d3/README.md
< ls ... ./src/cmd/vendor/github.com/ianlancetaylor/demangle/README.md > ? y
-rw-r--r--. 1 root root 98 9月 10 00:57 ./src/cmd/vendor/github.com/ianlancetaylor/demangle/README.md
< ls ... ./src/cmd/vendor/golang.org/x/sys/unix/README.md > ? N
< ls ... ./test/README.md > ? N
[root@localhost go]#
Wie Sie dem obigen Beispiel entnehmen können, werden Sie jedes Mal, wenn Sie den Befehl ls -l ausführen, gefragt, ob Sie ihn ausführen möchten.
Viertens Zusammenfassung
Die allgemeinen Suchparameter sind oben aufgeführt. Es ist zu beachten, dass es sich bei der Suche nach einer rekursiven Suche handelt. Wenn Sie beispielsweise im aktuellen Verzeichnis suchen, wird standardmäßig nach Dateien im aktuellen Verzeichnis und in den Unterverzeichnissen gesucht.
Fünf Referenzen
[1] https://www.runoob.com/linux/linux-comm-find.html
[2] https://man7.org/linux/man-pages/man1/find.1.html