Der Linux-Befehl find ist ein leistungsstarkes Tool, mit dem Systemadministratoren Dateien und Verzeichnisse basierend auf einer Vielzahl von Suchkriterien suchen und verwalten können. Es kann Verzeichnisse und Dateien anhand ihres Namens, ihres Typs oder ihrer Erweiterung, Größe, Berechtigungen usw. finden.
Neben dem Auffinden von Dateien und Verzeichnissen können Sie durch Kombinieren des Find-Befehls mit anderen die Ergebnisse bearbeiten. Durch das Hinzufügen der Option -exec können Systemadministratoren externe Befehle ausführen und Aktionen wie das Kopieren, Verschieben, Löschen oder Ändern von Berechtigungen der Dateien ausführen, die den angegebenen Kriterien wie Größe, Name usw. entsprechen.
In diesem Artikel beginnen wir mit der Erläuterung der grundlegenden Linux-Suchbefehle mit Beispielen. Hier erfahren Sie, wie Sie Dateien und Verzeichnisse finden. Wir zeigen Ihnen dann, wie Sie die Option -exec verwenden, um auf die Dateien oder Verzeichnisse basierend auf ihrer Größe, Berechtigungen usw. zu reagieren.
Die allgemeine Syntax für den Find-Befehl lautet
find {path} {name -of-file or dir-to-search} {action-to-take}
Wo,
- Pfad gibt das Verzeichnis an.
- name-of-file oder dir-to-search : Name der Datei oder des Verzeichnisses, nach dem gesucht werden soll
- auszuführende Aktion: wie Kopieren, Löschen, Verschieben usw.
In diesem Tutorial erklären wir, wie Sie Dateien und Verzeichnisse finden, die mit bestimmten Mustern übereinstimmen. Wir werden auch sehen, wie Aktionen für die Dateien oder Verzeichnisse ausgeführt werden, die der Befehl find findet. Die Anleitung basiert auf Ubuntu, ist aber auf die meisten Linux-Distributionen und -Versionen anwendbar.
Inhaltsverzeichnis
Finden Sie Dateien und Verzeichnisse
Finden Sie bestimmte Dateien anhand des Namens oder der Erweiterung
Um nach einer bestimmten Datei zu suchen, führen Sie den folgenden Befehl im Stammverzeichnis (/) aus. Der Befehl enthält den genauen Namen der gesuchten Datei.
find . -name file22.txt
Ausgabe
./test/file22.txt ./sales/file22.txt
Bitte beachten Sie, dass die Ergebnisse den Pfad enthalten. Dies ist wichtig, wenn Sie das Verzeichnis nicht kennen, in dem sich die Datei befindet, oder wenn sie sich an mehr als einem Ort befindet.
Sie können die Datei auch in einem anderen Verzeichnis suchen, während Sie sich noch am aktuellen Speicherort befinden. In diesem Fall müssen Sie den Pfad für das Verzeichnis angeben, in dem Sie suchen möchten.
find ./test -name file22.txt
Suche nach bestimmten Dateien in einem anderen Verzeichnis
In unserem Fall suchen wir alle, die mit der Buchstabendatei im Testverzeichnis beginnen.
find ./test -name file*
Ausgabe
./test/file22.txt ./test/file30.doc ./test/file1.txt ./test/file5,doc
Suchen Sie nach Dateien anhand der Erweiterung
Um eine Datei in Linux mit einer bestimmten Erweiterung zu finden, fügen Sie sie dem Befehl hinzu.
find . -name *.txt
Ausgabe
./test/subtest/subfil.txt ./test/file22.txt ./test/file1.txt ./home1/files32.txt ./home2/file22.txt ./qa/tags.txt
Finden Sie Dateien und Verzeichnisse nach Namen
Verwenden Sie den folgenden Befehl, um nach Dateien und Verzeichnissen zu suchen, die mit den Buchstaben qa beginnen. In 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*"
Es gibt die folgende Ausgabe zurück
./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
Verwenden Sie nur für Dateien den Typ f-Schalter.
Nur Dateien
find ./ -type f -name "qa*"
Ausgabe
./test/qatree.pdf ./test/qa.txt
Nur Verzeichnisse
Fügen Sie die Option Typ d hinzu, um nur Verzeichnisse zu suchen.
find ./ -type d -name "qa*"
Ausgabe
./home/qa
Suchbefehl ohne Berücksichtigung der Groß-/Kleinschreibung
Bei allen Suchen mit dem Schalter -name wird zwischen Groß- und Kleinschreibung unterschieden und es werden keine Ergebnisse mit Großbuchstaben ausgegeben. Um alle Fälle zu erhalten, verwenden Sie die Option -iname.
find ./ -iname "qa*"
Ausgabe
./test/qatree.pdf ./test/qa.txt ./test/QAtest.txt ./home/qa
Suchen Sie nach einer Datei in mehreren Verzeichnissen
Um die Dateien in verschiedenen Verzeichnissen zu finden, fügen Sie ihre Pfade im Befehl hinzu. In unserem Fall checken wir die Verzeichnisse test und numeric ein.
find ./test ./numeric -name file22.txt -type f
Ausgabe
./test/file22.txt /root/numeric/file22.txt
Finden Sie mehrere Dateien mit unterschiedlichen Erweiterungen aus allen Verzeichnissen
Sie können den Befehl find verwenden, um mehrere Dateien zu finden, die die verschiedenen Erweiterungen wie *.doc, *.txt, *.pdf usw. gemeinsam haben. Dies kann separat erfolgen, eine Erweiterung nach der anderen, oder mit nur einem Befehl, der alle enthält die gewünschten Erweiterungen.
finden . -type f ( -name „*.txt“ -o -name „*.pdf“ -o -name „*.doc“ )
Ausgang
./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
Finden Sie Dateien, die 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 Speicherort erinnern. Mit diesem Befehl können Sie alle Dateien finden, die Ihren Zieltext enthalten.
Um nach allen Dateien zu suchen, die das Wort Hyperkonvergenz enthalten, verwenden Sie;
find / -type f -exec grep -l -i "hyperconvergence" {} ;
Ausgabe
/root/numeric/hci /root/HCIP
Die Option –i ermöglicht es dem Befehl, Groß- und Kleinschreibung zu ignorieren und den Text zu finden, unabhängig davon, ob er groß geschrieben ist oder nicht, dh Hyperconvergence, Hyperconvergence usw.
Um nach den Dateien in einem bestimmten Verzeichnis zu suchen, fügen Sie sie einfach dem Befehl hinzu
find ./numeric -type f -exec grep -l -i "hyperconvergence" {} ;
Ausgabe
./numeric/hci
Entdecken Sie weitere grep-Befehlsbeispiele.
Finden Sie Dateien und Verzeichnisse basierend auf der Größe
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 Datei- oder Verzeichnistyp, nach dem Sie suchen, das geeignete Größenformat.
Zu den Größenoptionen gehören;
c – Bytes
k – Kilobyte
M – Megabyte
G – Gigabyte
Finden Sie Dateien einer bestimmten Größe – gleich 30 MB
Suchen Sie alle 30-MB-Dateien
find / -size 30M
Finden Sie Dateien, die größer als eine angegebene Größe sind
find -size +2M
Ausgabe
. /Downloads/ubuntu18043.iso ./.cache/pip/http/6/e/3/8/3/6e38383f41850c3e5705d48116bc52f81b92a80500f414305057 7a9c
Finden Sie Dateien mit weniger als 10 MB im aktuellen Verzeichnis
find . -type f -size -10M
Finden Sie Dateien mit Größen zwischen 100-200 MB
Bei der Suche nach Dateien in einem bestimmten Bereich, z. B. zwischen 100 und 200 MB
find / -size +100M -size -200M
Suchen Sie nach Verzeichnissen, die größer als 20 KB sind
find / -type d -size +20k
Finden Sie leere Dateien und Verzeichnisse.
Dateien
find ./ -type f -size 0
oder
find ./ -type f –empty
Verzeichnisse
find ./ -type d –empty
Finden Sie Dateien nach Alter oder Änderungszeit
Dateien finden, die älter als n Tage sind
find /path/ -type f -name '*.txt' -mtime +8
Das -mtime +8 sucht nach txt-Dateien, die älter als 8 Tage sind.
Nach Änderungsdatum
Dadurch wird nach Dateien gesucht, die in den letzten 17 Stunden geändert wurden
find . -mtime -17 -type f
Sucht nach Verzeichnissen, die in den letzten 10 Tagen geändert wurden
find . -mtime -10 -type d
Finden Sie Dateien basierend auf Zugriff oder Änderung
Finden Sie Dateien basierend auf Datum oder Uhrzeit des Zugriffs. Auf diese Weise können Sie Dateien anzeigen, auf die innerhalb eines bestimmten Zeitraums zugegriffen wurde oder auf die nicht zugegriffen wurde.
Zum Anzeigen von Dateien, auf die in den letzten 10 Tagen im Home-Verzeichnis nicht zugegriffen wurde.
find /home -atime +10
Dateien, auf die vor genau 10 Tagen zugegriffen wurde
find /home -atime 10
Zugriff innerhalb der letzten 10 Tage
find /home -atime -10
Finden Sie Dateien, die in den letzten n Tagen geändert wurden
Sie können auch nach den Dateien im /home-Verzeichnis suchen, die in den letzten 10 Tagen mit dem Befehl geändert wurden;
find /home -mtime -10
Finden Sie 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 in den letzten 10 Minuten zugegriffen wurde, verwenden Sie die Option -amin.
find . -amin -10 -type f
Ausgabe
./.bash_history ./[email protected]:~#
Verzeichnisse, auf die in den letzten 10 Minuten zugegriffen wurde
find . -amin -10 -type d
Finden Sie Dateien, die bestimmten Berechtigungen entsprechen
Syntax
$ find -perm mode
Wobei Modus die Berechtigung ist, die entweder numerisch wie 644, 655, 700, 777 usw. oder Buchstaben wie u=x, a=r+x usw. ist.
Sie können den Modus auf drei verschiedene Arten festlegen.
Finden Sie Dateien mit der Berechtigung 777
find -perm 777
Ausgabe
./file1
Finden Sie Dateien mit mindestens 766
find -perm -766
Ausgabe
./file2 ./file1
Der Befehl sucht nach allen Dateien, in denen die
- Der Dateieigentümer hat Lese-/Schreib-/Ausführungsberechtigungen.
- Die Gruppe hat Lese-/Schreibberechtigungen
- Andere haben Lese-/Schreibrechte
Als solches gibt es zwei Dateien zurück, die dieses Kriterium erfüllen – Datei1 und Datei2. Die Dateien müssen nicht die genauen 766-Berechtigungen haben und können beliebig lange zusätzliche haben, müssen aber mindestens die angegebenen haben.
Finden Sie Dateien, die vom Eigentümer beschreibbar sind
Wir werden jetzt das „/“ verwenden, um nach Dateien zu suchen, die entweder von ihrem Besitzer, ihrer Gruppe oder anderen beschreibbar sind.
find -perm /222 . ./file2 ./file3 ./file1
Das obige sucht nach Dateien, die entweder von ihrem Eigentümer oder ihrer Gruppe beschreibbar sind.
Dies gibt Dateien zurück, die von beiden beschreibbar sind, aber nicht unbedingt von beiden. Um Dateien anzuzeigen, bei denen beide Schreibrechte haben, verwenden Sie das Präfix –.
find -perm -220
Ausgabe
./file2 ./file1
Finden Sie Dateien, die einem Benutzer gehören
Finden Sie alle Dateien, die Jack gehören
find /home -user jack
Ausgabe
/home/jack /home/jack/examples.desktop /home/jack/.gnupg /home/jack/.gnupg/private-keys-v1.d /home/jack/ans.cgi
Finden Sie bestimmte Dateien, die einem Benutzer gehören
Finden Sie alle Textdateien, die Jack gehören
find /home -user jack -iname "*.txt"
Ausgabe
/home/jack/docs/file32.txt
Suchen und listen Sie Dateien und Verzeichnisse zusammen mit ihren Berechtigungen auf
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 Documents 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 root 0 Jan 4 12:23 file23.txt
Finden Sie die Ergebnisse heraus und handeln Sie danach
In diesem Abschnitt sehen wir uns an, wie Sie auf die Dateien reagieren können, die mit dem im find-Befehl angegebenen Muster übereinstimmen.
Suchen Sie Dateien und ändern Sie Berechtigungen
Suchen und ändern Sie die Berechtigungen bestimmter Dateitypen. In unserem Fall arbeiten wir mit PHP-Dateien mit unterschiedlichen Berechtigungen, wie unten gezeigt.
[email protected]:~/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 (oben) und ersetzen ihre Berechtigungen durch 755
find ver -name "*.php" -type f -exec chmod 755 {} ;
Der Befehl sucht im ver-Verzeichnis nach PHP-Dateien und setzt dann deren Berechtigung auf 755 (rwxr-xr-x)
Ergebnisse
[email protected]:~/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
Suchen und ändern Sie Datei- und Verzeichnisberechtigungen
Finden Sie Dateien mit 644-Berechtigungen und ändern Sie sie so, dass sie 655-Berechtigungen haben
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 644 Berechtigungen
drwxrwxr-x 2 jack jack 4096 Jan 3 12:45 docs
Um es 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
find . -type d -perm 755
Ausgabe
.
./docs
Von oben können wir sehen, dass die Root- und Docs-Verzeichnisse die 755-Berechtigungen haben.
Der Befehl Ls –la enthält die folgenden Details
drwxr-xr-x 2 jack jack 4096 Jan 3 12:45 docs
Finden und kopieren Sie Dateien oder Verzeichnisse
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 ;
Suchen und kopieren Sie einen Dateityp in ein Verzeichnis
Um Dateien wie Bilder mit der Erweiterung jpg im aktuellen Verzeichnis zu finden und sie an einen anderen Ort wie einen 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.
Suchen und kopieren Sie eine Datei in viele Verzeichnisse
Suchen und kopieren Sie ein einzelnes in mehrere Verzeichnisse.
find ~/tmp/dir1/ ~/tmp/dir2/ $HOME/3/ -maxdepth 0 -exec cp ~/numeric/hci {} ;
Dadurch wird die Datei hci file gefunden und in die drei Verzeichnisse /tmp/dir1/ /tmp/dir2/ und $HOME/3/ kopiert.
Suchen und verschieben Sie Dateien in ein anderes Verzeichnis
Verschieben einer bekannten Datei von einem Verzeichnis in ein anderes. So verschieben Sie die Datei universal.php;
find ~/folder/ -type f -name universal.php -exec mv {} ~/numeric/ ;
Suchen und verschieben Sie Dateien mit einer bestimmten Erweiterung in einen anderen Ordner
find ~/numeric/ -type f -name '*.php' -exec mv {} ~/folder/ ;
Finden Sie bestimmte Dateien und verschieben Sie sie in einen bestimmten anderen Ordner
find -type f -name uni*.* -exec mv {} ~/unifiles/ ;
Der Befehl sucht nach allen Dateien, deren Namen mit uni beginnen und eine beliebige Erweiterung haben. Es verschiebt sie dann in das Verzeichnis /unifiles/
Suchen und verschieben Sie Dateien nach Alter
Suchen und verschieben Sie Dateien, die älter als die angegebenen Tage sind, an einen anderen Ort, z. B. das Archiv.
find /path/ -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.
Finden und löschen Sie Dateien und Verzeichnisse
Die Syntax zum Suchen und Entfernen von Dateien oder Verzeichnissen im aktuellen Verzeichnis lautet
finden . -type f -name „zu löschende Datei“ -exec rm -f {} ; nur Dateien löschen oder
finden . -type d -name „dir-to-delete“ -exec rm -rf {} ; nur Verzeichnisse löschen
Suchen und löschen Sie nur bestimmte Dateien
Verwenden Sie zum Suchen und Löschen von Dateien, die mit til beginnen;
find . -type f -name "til*" -exec rm {} ;
Zum Suchen und Löschen von Verzeichnissen, die mit til beginnen
find . -type d -name "til*" -exec rm {} ;
Entfernen Sie sowohl Dateien als auch Verzeichnisse
find . -name "til*" -exec rm -rf {} ;
Dadurch werden sowohl Dateien als auch Verzeichnisse entfernt, die mit den Buchstaben bis beginnen.
Nach Erweiterung löschen
Nachfolgend erfahren Sie, wie Sie alle txt-Dateien im aktuellen Verzeichnis finden und löschen können. Ersetzen Sie die txt-Datei durch eine andere Erweiterung wie bak, pdf oder eine andere, die Sie entfernen möchten.
find . -type f -name "*.txt" -exec rm -f {} ;
Falls 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: remove regular empty file './File22.txt'? y rm: remove regular empty file './file22.txt'? y rm: remove regular empty file './file23.txt'?
Standardmäßig entfernt -rm die Verzeichnisse nicht und Sie müssen die Option –r verwenden, um eine rekursive Entfernung sicherzustellen. Dadurch wird sichergestellt, dass leere Verzeichnisse und solche, die Dateien enthalten, gelöscht werden. Die Option -f erzwingt das Entfernen und wird sowohl für die Dateien als auch für die Verzeichnisse verwendet.
Suchen und löschen Sie Dateien, die älter als n Tage sind
Suchen und löschen Sie Sicherungsdateien, die älter als 20 Tage sind, aus dem aktuellen Verzeichnis.
find . -type f -name '*.bak' -mtime +20 -exec rm {} ;
Dadurch werden alle .bak-Dateien gelöscht, die älter als 20 Tage sind.
Nur Verzeichnisse suchen und löschen
Um ein Verzeichnis namens dir22 zu löschen
find . -type d -name dir22 -exec rm -rf {} ;
Stellen Sie sicher, dass die Schreibweise des Verzeichnisnamens übereinstimmt, oder verwenden Sie die Option -iname.
find . -type d -iname Dir22 -exec rm -rf {} ;
Entfernt sowohl Dir22 als auch dir22
Verwenden Sie zur Bestätigung vor dem Löschen die Option -i.
find . -type d -iname Dir22 -exec rm -rf -i {} ;
Ausgabe
rm: Verzeichnis ‚./Dir22‘ entfernen? n
rm: Verzeichnis ‚./dir22‘ entfernen? j
In unserem Fall haben wir n für das Verzeichnis Dir22 eingegeben, das nicht gelöscht wird, und y für das Verzeichnis dir22, das jetzt entfernt wird.
Suchen und entfernen Sie leere Dateien
Sie können einen der folgenden Befehle verwenden, um leere Dateien zu finden und 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
Suchen und entfernen Sie leere Verzeichnisse
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 -empty -delete
Bitte beachten Sie, dass das Löschen von System- oder kritischen Dateien von Ihrem Computer das Betriebssystem oder Anwendungen beschädigen oder zum Verlust Ihrer wichtigen Daten führen kann.
Um versehentliches Löschen zu vermeiden, empfiehlt es sich, ein Nicht-Root-Benutzerkonto zu verwenden. Stellen Sie außerdem sicher, dass Sie die richtigen Dateien löschen, die nicht nützlich sind, und dass Sie für alle Fälle eine Sicherungskopie aller Ihrer Datendateien haben.
Was kommt als nächstes?
Probieren Sie die obigen Linux-Suchbefehle in Ihrer Labor- oder NICHT-PRODUKTIONS-Umgebung aus. Sehen Sie, ob Sie einige verwenden können, um die Dateisystembereinigung mit Crontab zu automatisieren. Und um Linux zu meistern, schau dir das an Online Kurs.