Der Linux-Befehl find
ist ein leistungsstarkes Werkzeug, mit dem Systemadministratoren Dateien und Verzeichnisse anhand einer Vielzahl von Suchkriterien finden und verwalten können. Es kann Verzeichnisse und Dateien anhand ihres Namens, ihres Typs oder ihrer Erweiterung, ihrer Größe, ihrer Berechtigungen usw. finden.
Neben dem Auffinden von Dateien und Verzeichnissen können Sie den Befehl find
mit anderen Befehlen kombinieren, um mit den Ergebnissen zu arbeiten. Durch Hinzufügen der Option -exec
können Sysadmins externe Befehle ausführen und Aktionen wie das Kopieren, Verschieben, Löschen oder Ändern der Berechtigungen von Dateien, die den angegebenen Kriterien wie Größe, Name usw. entsprechen, durchführen
In diesem Artikel werden wir zunächst die grundlegenden Linux Suchbefehle mit Beispielen erläutern. So erfahren Sie, wie Sie Dateien und Verzeichnisse suchen können. Anschließend zeigen wir Ihnen, wie Sie die Option -exec
verwenden können, um die Dateien oder Verzeichnisse auf der Grundlage ihrer Größe, ihrer Berechtigungen usw. zu bearbeiten
Die allgemeine Syntax für den Befehl finden lautet
find {Pfad} {Name -der zu suchenden Datei oder des zu suchenden Verzeichnisses} {Aktion-zu-nehmen}
Wobei,
pfad
gibt es das Verzeichnis an.name der zu suchenden Datei oder des zu suchenden Verzeichnisses
: Name der zu suchenden Datei oder des zu suchenden Verzeichnissesauszuführende Aktion
: wie Kopieren, Löschen, Verschieben usw.
In diesem Tutorial werden wir Ihnen erklären, wie Sie Dateien und Verzeichnisse finden, die bestimmten Mustern entsprechen. Wir werden auch sehen, wie Sie Aktionen mit den Dateien oder Verzeichnissen durchführen, die der Befehl findet. Die Anleitung basiert auf Ubuntu, ist aber auf die meisten Linux-Distributionen und -Versionen anwendbar.
Dateien und Verzeichnisse suchen
Bestimmte Dateien nach Name oder Erweiterung suchen
Um nach einer bestimmten Datei zu suchen, führen Sie den folgenden Befehl vom Stammverzeichnis (/) aus. Der Befehl enthält den genauen Namen der Datei, nach der Sie suchen
find .
–
name datei22.txt
Ausgabe
./test/file22.txt
./sales/file22.txt
Bitte beachten Sie, dass die Ergebnisse den Pfad enthalten. Das ist wichtig, wenn Sie das Verzeichnis, in dem sich die Datei befindet, nicht kennen oder wenn sie sich an mehreren Stellen befindet.
Sie können auch in einem anderen Verzeichnis nach der Datei suchen, während Sie sich noch am aktuellen Ort befinden. In diesem Fall müssen Sie den Pfad zu dem Verzeichnis angeben, in dem Sie suchen möchten
find ./test -name datei22.txt
Suche nach bestimmten Dateien in einem anderen Verzeichnis
In unserem Fall suchen wir nach allen Dateien, die mit den Buchstaben Datei beginnen, im Verzeichnis test
find ./test -name datei*
Ausgabe
./test/file22.txt
./test/file30.doc
./test/file1.txt
./test/file5,doc
Suche nach Dateien anhand der Erweiterung
Um in Linux eine Datei mit einer bestimmten Erweiterung zu finden, fügen Sie diese an den Befehl an
find .
–
name *.txt
Ausgabe
./test/subtest/subfil.txt
./test/file22.txt
./test/file1.txt
./home1/files32.txt
./home2/file22.txt
./qa/tags.txt
Dateien und Verzeichnisse nach Namen suchen
Verwenden Sie den folgenden Befehl, um nach Dateien und Verzeichnissen zu suchen, die mit den Buchstaben qa
beginnen. Auf unserem Computer haben wir die Dateien qatree.txt
und qa.txt
sowie ein Verzeichnis mit dem Namen qa
Wenn wir den Befehl ausführen
find ./ -name "qa*"
Erhalten Sie die folgende Ausgabe
./test/qatree.pdf
./test/qa.txt
./home/qa
Der Befehl gibt sowohl die Dateien als auch die Verzeichnisse zurück, die den Suchkriterien entsprechen. Um nur Dateien oder Verzeichnisse zu finden, müssen Sie dies im Befehl angeben.
Nur Dateien oder Verzeichnisse suchen
Für nur Dateien verwenden Sie den Schalter type f
Nur Dateien
find ./ -type f -name "qa*"
Ausgabe
./test/qatree.pdf
./test/qa.txt
Nur Verzeichnisse
Fügen Sie die Option type d
dazu, um nur Verzeichnisse zu finden
find ./ -type d -name "qa*"
Ausgabe
./home/qa
Groß- und Kleinschreibung nicht beachten
Bei allen Suchen mit der Option -name
wird die Groß-/Kleinschreibung beachtet und es werden keine Ergebnisse mit Großbuchstaben angezeigt. Um alle Groß- und Kleinschreibung zu erhalten, verwenden Sie die Option -iname
find ./ -iname "qa*"
Ausgabe
./test/qatree.pdf
./test/qa.txt
./test/QAtest.txt
./home/qa
Suche nach einer Datei aus mehreren Verzeichnissen
Um die Dateien in verschiedenen Verzeichnissen zu finden, fügen Sie deren Pfade in den Befehl ein. In unserem Fall werden wir in den Verzeichnissen test
und numeric
suchen
find ./test ./numeric -name file22.txt -type f
Ausgabe
./test/file22.txt
/root/numeric/file22
.txt
Mehrere Dateien mit unterschiedlichen Erweiterungen aus allen Verzeichnissen suchen
Sie können den Befehl find verwenden, um mehrere Dateien zu finden, die unterschiedliche Erweiterungen wie *.doc
, *.txt
*.pdf
usw. haben. Sie können dies separat tun, eine Erweiterung nach der anderen, oder einen einzigen Befehl verwenden, der alle gewünschten Erweiterungen einschließt
find .
–type f ( -name "*.txt" -o -name "*.pdf" -o -name "*.doc" )
ausgabe
./test/subtest/subfil.txt
./test/qatree.pdf
./test/file22.txt
./test/qa.txt
./test/file30.doc
./books/acro.pdf
./data1/FILE22.txt
./docs/files32.txt
Dateien finden, die einen bestimmten Text enthalten
Manchmal möchten Sie auf eine Datei zugreifen, die einen bestimmten Text enthält, können sich aber nicht an den Dateinamen oder den Speicherort erinnern. Mit diesem Befehl können Sie alle Dateien suchen, die Ihren Zieltext enthalten
Um nach allen Dateien zu suchen, die das Wort hyperconvergence" enthalten, verwenden Sie
find / -type f -exec grep -l -i "hyperconvergence" {}
Ausgabe
/wurzel/numerisch/hci
/wurzel/HCIP
Mit der Option -i
kann den Befehl Groß- und Kleinschreibung ignorieren und findet den Text unabhängig von der Großschreibung, d.h. Hyperkonvergenz, Hyperkonvergenz, usw.
Um nach den Dateien in einem bestimmten Verzeichnis zu suchen, fügen Sie diese einfach dem Befehl hinzu
find ./numeric -type f -exec grep -l -i "hyperconvergence" {}
Ausgabe
./numerisch/hci
Entdecken Sie weitere Beispiele für den Befehl grep
Dateien und Verzeichnisse anhand der Größe suchen
Sie können alle Dateien oder Verzeichnisse finden, die kleiner, gleich oder größer als eine bestimmte Größe, innerhalb eines bestimmten Bereichs oder leer sind. Verwenden Sie je nach Art der Dateien oder Verzeichnisse, nach denen Sie suchen, das entsprechende Größenformat
Die Optionen für die Größe umfassen
c
- Bytes
k
- Kilobytes
M
- Megabytes
G
- Gigabyte
Dateien mit einer bestimmten Größe finden - gleich 30MB
So finden Sie alle 30MB großen Dateien
finden / -Größe 30M
Dateien finden, die größer als eine bestimmte Größe sind
find -Größe 2M
Ausgabe
.
/Downloads/ubuntu18043.iso
./.cache/pip/http/6/e/3/8/3/6e38383f41850c3e5705d48116bc52f81b92a80500f414305057 7a9c
Dateien mit weniger als 10MB im aktuellen Verzeichnis finden
find .
–
typ f -Größe -10M
Dateien mit einer Größe zwischen 100-200MB finden
Bei der Suche nach Dateien innerhalb eines bestimmten Bereichs, z. B. zwischen 100 und 200 MB
find / -Größe 100M -Größe -200M
Suche nach Verzeichnissen, die größer als 20kb sind
find / -type d -Größe 20k
Leere Dateien und Verzeichnisse finden.
Dateien
find ./ -type f -Größe 0
oder
find ./ -type f -leer
Verzeichnisse
find ./ -type d -leer
Dateien nach Alter oder Änderungszeit suchen
Finden Sie Dateien, die älter als n Tage sind
find /pfad/ -type f -name '*.txt' -mtime 8
Mit -mtime 8
suchen Sie nach txt-Dateien
, die älter als 8 Tage sind
Nach Änderungsdatum
So suchen Sie nach Dateien, die innerhalb der letzten 17 Stunden geändert wurden
find .
–
mtime -17 -type f
Sucht nach Verzeichnissen, die innerhalb der letzten 10 Tage geändert wurden
find .
–
mtime -10 -type d
Findet Dateien aufgrund von Zugriff oder Änderung
Findet Dateien anhand des Zugriffsdatums oder der Zugriffszeit. Damit können Sie Dateien anzeigen, auf die innerhalb eines bestimmten Zeitraums zugegriffen wurde oder nicht.
Um Dateien im Home-Verzeichnis zu finden, auf die in den letzten 10 Tagen nicht zugegriffen wurde
find /home -atime 10
Dateien, auf die vor genau 10 Tagen zugegriffen wurde
find /home -Zeit 10
Dateien, auf die innerhalb der letzten 10 Tage zugegriffen wurde
find /home -Zeit -10
Suche nach Dateien, die in den letzten n Tagen geändert wurden
Sie können auch mit dem Befehl nach den Dateien im Verzeichnis /home
suchen, die innerhalb der letzten 10 Tage geändert wurden
find /home -mtime -10
Suchen Sie nach Dateien, die innerhalb eines bestimmten Zeitraums geändert wurden.
Zum Beispiel alle Dateien, die vor 6 bis 15 Tagen im Home-Verzeichnis geändert wurden
find /home -type f -mtime 6 -mtime -15
Dateien und Verzeichnisse, auf die in den letzten 10 Minuten zugegriffen wurde
Um die Dateien zu finden, auf die innerhalb der letzten 10 Minuten zugegriffen wurde, verwenden Sie die Option -amin
find .
–
amin -10 -type f
Ausgabe
./.bash_history
./.profileroot@ubuntu1804:~#
Verzeichnisse, auf die in den letzten 10 Minuten zugegriffen wurde
find .
–
amin -10 -Typ d
Dateien mit bestimmten Berechtigungen finden
Syntax
$ find -perm mode
Dabei ist mode die Berechtigung, die entweder numerisch ist, wie z.B. 644, 655, 700, 777
, usw., oder aus Buchstaben besteht, wie z.B. u=x, a=r x,
usw
Sie können den Modus auf die folgenden drei verschiedenen Arten angeben
- Ohne Präfix, wenn Sie Dateien mit genau den angegebenen Berechtigungen suchen möchten.
- Mit "
-
" für Dateien mit mindestens der angegebenen Berechtigung. Dies gibt Dateien mit der angegebenen sowie zusätzlichen höheren Berechtigungen zurück. - Die Verwendung von "
/
" erfordert die Angabe des Eigentümers oder der Gruppe mit der Berechtigung für die Datei.
Dateien mit der Berechtigung 777 finden
find -perm 777
Ausgabe
./datei1
Finden Sie Dateien mit mindestens 766
find -perm -766
Ausgabe
./file2
./file1
Der Befehl sucht nach allen Dateien, in denen der
- Der Dateibesitzer hat Lese-/Schreib-/Ausführungsrechte.
- Gruppe hat Lese-/Schreibberechtigung
- Andere haben Lese-/Schreibberechtigung
Er gibt auch zwei Dateien zurück, die dieses Kriterium erfüllen - Datei1 und Datei2. Die Dateien müssen nicht die exakten 766
Berechtigungen haben und können beliebig viele weitere haben, müssen aber mindestens die angegebenen haben
Vom Besitzer beschreibbare Dateien finden
Wir werden nun das "/
" verwenden, um nach Dateien zu suchen, die entweder von ihrem Besitzer, ihrer Gruppe oder von anderen geschrieben werden können
find -perm /222
.
./file2
./file3
./file1
Die obige Option sucht nach Dateien, die entweder von ihrem Besitzer oder ihrer Gruppe beschreibbar sind
Dies gibt Dateien zurück, die entweder von einem oder von beiden geschrieben werden können, aber nicht unbedingt von beiden. Um Dateien anzuzeigen, für die beide Schreibrechte besitzen, verwenden Sie das Präfix -
find -perm -220
Ausgabe
./datei2
./datei1
Dateien finden, die zu einem Benutzer gehören
Finden Sie alle Dateien, die zu Jack gehören
find /home -Benutzer jack
Ausgabe
/home/jack
/home/jack/examples
.desktop
/home/jack/
.gnupg
/home/jack/
.gnupg/private-keys-v1.d
/home/jack/ans
.cgi
Bestimmte Dateien im Besitz eines Benutzers finden
Alle Textdateien finden, die zu Jack gehören
find /home -benutzer jack -iname "*.txt"
Ausgabe
/home/jack/docs/file32.txt
Dateien und Verzeichnisse mit den entsprechenden Berechtigungen suchen und auflisten
find -name "*.conf"
| ls -l
Ausgabe
total 120
drwxr-xr-x 2 root root 4096 Dec 31 13:19 backup2
drwxr-xr-x 2 root root 4096 Jan 4 11:57 Desktop
drwxr-xr-x 2 root root 4096 Dec 31 11:50 Dokumente
drwxr-xr-x 2 root root 4096 Dec 31 12:27 Downloads
-rw-r--r-- 1 root root 0 Jan 4 12:02 file22.doc
drwxr-xr-x 2 root root 4096 Jan 4 12:14 file23
-rw-r-r-
1 root 0 Jan 4 12:23 file23.txt
Suchen und handeln Sie nach den Ergebnissen
In diesem Abschnitt sehen wir uns an, wie Sie auf die Dateien reagieren können, die dem im Befehl angegebenen Muster entsprechen.
Dateien finden und Berechtigungen ändern
Suchen Sie bestimmte Dateitypen und ändern Sie deren Berechtigungen. In unserem Fall werden wir mit PHP-Dateien mit unterschiedlichen Berechtigungen arbeiten, wie unten gezeigt
jack@ubuntu1804:~/ver$ ls -la
total 8
drwxrwxr-x 2 jack jack 4096 Jan 3 14:11 .
drwxr-xr-x 8 jack jack 4096 Jan 3 14:05 ..
-rwxr-xr-x 1 jack jack 0 Jan 3 14:06 ans.php
-rw-rw-r-- 1 jack jack 0 Jan 3 14:11 base.php
-rwxr-xr-x
1 jack jack 0 Jan 3 14:06 query.php
-rw-rw-r-
1 jack jack 0 Jan 3 14:11 qust.php
-rwxr-xr-x
1 jack jack 0 Jan 3 14:06 text.php
-rw-rw-r-
1 jack jack 0 Jan 3 14:11 vary.php
Wir suchen nun nach allen PHP-Dateien (siehe oben) und ersetzen deren Berechtigungen durch 755
find ver -name "*.php" -type f -exec chmod 755 {}
Der Befehl sucht nach PHP-Dateien im Verzeichnis ver
und setzt deren Berechtigung auf 755
(rwxr-xr-x
)
Ergebnisse
jack@ubuntu1804:~/ver$ ls -la
total 8
drwxrwxr-x 2 jack jack 4096 Jan 3 14:11 .
drwxr-xr-x 8 jack jack 4096 Jan 3 14:05 ..
-rwxr-xr-x 1 jack jack 0 Jan 3 14:06 ans.php
-rwxr-xr-x 1 jack jack 0 Jan 3 14:11 base.php
-rwxr-xr-x
1 jack jack 0 Jan 3 14:06 query.php
-rwxr-xr-x
1 jack jack 0 Jan 3 14:11 qust.php
-rwxr-xr-x
1 jack jack 0 Jan 3 14:06 text.php
-rwxr-xr-x
1 jack jack 0 Jan 3 14:11 vary.php
Datei- und Verzeichnisberechtigungen suchen und ändern
Suchen Sie Dateien mit 644 Berechtigungen und ändern Sie diese auf 655 Berechtigungen
find .
–
type f -perm 644 -exec chmod 655 {}
Sie können auch nach Verzeichnissen mit 644 Berechtigungen suchen und diese durch 755 ersetzen.
find .
–
type d -perm 644
Ausgabe
./docs
Der Ordner docs hat die Berechtigung 644
drwxrwxr-x 2 jack jack 4096 Jan 3 12:45 docs
Um sie auf 755
zu setzen, führen wir aus
find .
–
type d -perm 644 -exec chmod 755 {}
Jetzt können wir noch einmal nachsehen, was genau 755
ist
find .
–
type d -perm 755
Ausgabe
./docs
Wie wir oben sehen, haben die Verzeichnisse root und docs die Berechtigung 755
Der Befehl Ls -la
zeigt die folgenden Details an
drwxr-xr-x 2 jack jack 4096 Jan 3 12:45 docs
Dateien oder Verzeichnisse suchen und kopieren
Suchen und kopieren Sie eine bestimmte Datei in ein Verzeichnis
Der folgende Befehl findet die Datei file22.txt
und kopiert sie in das Verzeichnis ~/tmp/images
find -iname file22.txt -exec cp {} ~/tmp/images
Einen Dateityp suchen und in ein Verzeichnis kopieren
Um Dateien wie z.B. Bilder mit der Erweiterung jpg
im aktuellen Verzeichnis zu finden und sie an einem anderen Ort wie einem Bilderordner zu kopieren, verwenden Sie
find -iname '*.jpg' -exec cp {} ~/tmp/images
Dadurch werden alle jpg-Dateien gefunden und in den Ordner ~/tmp/images
kopiert
Eine Datei finden und in mehrere Verzeichnisse kopieren
Suchen und kopieren Sie eine einzelne Datei in mehrere Verzeichnisse
find ~/tmp/dir1/ ~/tmp/dir2/ $HOME/3/ -maxdepth 0 -exec cp ~/numeric/hci {}
Dies findet die Datei hci und kopiert sie in die drei Verzeichnisse /tmp/dir1/ /tmp/dir2/
und $HOME/3/
Dateien suchen und in ein anderes Verzeichnis verschieben
So verschieben Sie eine bekannte Datei von einem Verzeichnis in ein anderes. Um die Datei universal.php
zu verschieben
find ~/ordner/ -type f -name universal.php -exec mv {} ~/numeric/
Dateien mit einer bestimmten Erweiterung suchen und in einen anderen Ordner verschieben
find ~/numeric/ -type f -name '*.php' -exec mv {} ~/folder/
Bestimmte Dateien finden und in einen bestimmten anderen Ordner verschieben
find -type f -name uni*.* -exec mv {} ~/unifiles/
Der Befehl sucht nach allen Dateien, deren Namen mit uni
beginnen und eine beliebige Erweiterung haben. Er verschiebt sie dann in das Verzeichnis /unifiles/
Dateien anhand des Alters suchen und verschieben
Suchen und verschieben Sie Dateien, die älter als die angegebenen Tage sind, an einen anderen Ort, z.B. in das Archiv.
find /pfad/ -type f -name '*.pdf' -mtime 20 -exec mv {} /backup1/
Dies sucht nach pdf-Dateien, die älter als 20 Tage sind, und verschiebt sie in das Verzeichnis backup1
Dateien und Verzeichnisse suchen und löschen
Die Syntax zum Suchen und Löschen von Dateien oder Verzeichnissen im aktuellen Verzeichnis lautet
find .
–type f -name "zu löschende Datei" -exec rm -f {} ;
um nur Dateien zu löschen oder
find .
–type d -name "zu löschendes Verzeichnis" -exec rm -rf {}
um nur Verzeichnisse zu löschen
Nur bestimmte Dateien suchen und löschen
Um Dateien zu suchen und zu löschen, die mit til beginnen, verwenden Sie
find .
–
type f -name "til*" -exec rm {}
Um Verzeichnisse zu suchen und zu löschen, die mit til beginnen
find .
–
type d -name "til*" -exec rm {}
Sowohl Dateien als auch Verzeichnisse entfernen
find .
–
name "til*" -exec rm -rf {}
Dies entfernt sowohl Dateien als auch Verzeichnisse, die mit den Buchstaben til beginnen.
Löschen nach Erweiterung
Sehen Sie im Anschluss, wie Sie alle txt-Dateien
im aktuellen Verzeichnis finden und löschen können. Ersetzen Sie das txt
durch eine andere Erweiterung wie bak
, pdf
oder eine andere, die Sie entfernen möchten
find .
–
type f -name "*.txt" -exec rm -f {}
Wenn Sie möchten, dass das System Sie vor dem Löschen jeder Datei zur Bestätigung auffordert, fügen Sie die Option -i wie unten beschrieben hinzu
find .
–
type f -name "*.txt" -exec rm -i {}
Ausgabe
rm: normale leere Datei './Datei22.txt' entfernen? y
rm
: normale leere Datei './Datei22.txt' entfernen? y
rm
: normale leere Datei './Datei23.txt' entfernen?
Standardmäßig ausgelöscht -rm
die Verzeichnisse nicht und Sie müssen die Option -r
verwenden, um ein rekursives Löschen zu gewährleisten. Damit wird sichergestellt, dass leere Verzeichnisse und solche, die Dateien enthalten, gelöscht werden. Die Option -f
erzwingt das Löschen und wird sowohl für Dateien als auch für Verzeichnisse verwendet
Dateien finden und löschen, die älter als n Tage sind
Findet und löscht Sicherungsdateien, die älter als 20 Tage sind, im aktuellen Verzeichnis
find .
–
type f -name '*.bak' -mtime 20 -exec rm {}
Dies löscht alle .bak-Dateien, die älter als 20 Tage sind
Nur Verzeichnisse suchen und löschen
Um ein Verzeichnis namens dir22
zu löschen
find .
–
geben Sie d -name dir22 -exec rm -rf {} ein
Achten Sie auf die Groß- und Kleinschreibung des Verzeichnisnamens oder verwenden Sie die Option -iname
find .
–
type d -iname Dir22 -exec rm -rf {}
Entfernt sowohl Dir22
als auch dir22
Um vor dem Löschen zu bestätigen, verwenden Sie die Option -i
find .
–
type d -iname Dir22 -exec rm -rf -i {}
Ausgabe
rm: Verzeichnis './Dir22' entfernen? n
rm: Verzeichnis './dir22' entfernen? y
In unserem Fall haben wir n
für das Verzeichnis Dir22
eingegeben, das nicht gelöscht werden soll, und y
für das Verzeichnis Dir22
, das nun entfernt werden soll
Leere Dateien finden und entfernen
Sie können einen der folgenden Befehle verwenden, um leere Dateien zu finden und sie automatisch zu löschen
find ./ -type f -size 0 -exec rm -f {}
oder
find ./ -type f -size 0 | xargs rm -f
oder
find ./ -type f -size 0 -delete
Leere Verzeichnisse finden und entfernen
Um leere Verzeichnisse zu entfernen, verwenden wir die Option d
find ./ -type d -empty -exec rmdir {}
Eine andere Alternative ist die Verwendung von delete anstelle von remove
find ./ -type d -leer -delete
Bitte beachten Sie, dass das Löschen von System- oder kritischen Dateien auf Ihrem Computer das Betriebssystem oder Anwendungen beschädigen oder zum Verlust Ihrer wichtigen Daten führen kann.
Um versehentliches Löschen zu vermeiden, verwenden Sie am besten ein Nicht-Root-Benutzerkonto. Vergewissern Sie sich außerdem, dass Sie die richtigen, nicht benötigten Dateien löschen und dass Sie für den Fall der Fälle eine Sicherungskopie aller Ihrer Datendateien haben
Was kommt als Nächstes?
Probieren Sie die oben genannten Linux Suchbefehle in Ihrer Labor- oder NICHT PRODUKTIONS-Umgebung aus. Sehen Sie, ob Sie einige davon verwenden können, um die Bereinigung des Dateisystems mit Crontab zu automatisieren. Und um Linux zu beherrschen, sollten Sie sich diese Online-Kurs ansehen.