Foto mit freundlicher Genehmigung von Qole Pejorian
Abgesehen von der grundlegenden Operation, nach Dateien in einer Verzeichnisstruktur zu suchen, können Sie mit dem Befehl find auch mehrere praktische Operationen ausführen, die Ihre Reise auf der Befehlszeile vereinfachen.
Lassen Sie uns in diesem Artikel 15 praktische Beispiele für den Linux-Suchbefehl betrachten, die sowohl für Neulinge als auch für Experten sehr nützlich sein werden.
Erstellen Sie zuerst die folgenden leeren Beispieldateien in Ihrem Home-Verzeichnis, um einige der unten erwähnten find-Befehlsbeispiele auszuprobieren.
# vim create_sample_files.sh touch MybashProgram.sh touch mycprogram.c touch MyCProgram.c touch Program.c mkdir backup cd backup touch MybashProgram.sh touch mycprogram.c touch MyCProgram.c touch Program.c # chmod +x create_sample_files.sh # ./create_sample_files.sh # ls -R .: backup MybashProgram.sh MyCProgram.c create_sample_files.sh mycprogram.c Program.c ./backup: MybashProgram.sh mycprogram.c MyCProgram.c Program.c
1. Dateien anhand des Namens suchen
Dies ist eine grundlegende Verwendung des Find-Befehls. Dieses Beispiel findet alle Dateien mit dem Namen – MyCProgram.c im aktuellen Verzeichnis und allen seinen Unterverzeichnissen.
# find -name "MyCProgram.c" ./backup/MyCProgram.c ./MyCProgram.c
2. Finden Sie Dateien unter Verwendung des Namens und ignorieren Sie die Groß-/Kleinschreibung
Dies ist eine grundlegende Verwendung des Find-Befehls. Dieses Beispiel findet alle Dateien mit dem Namen – MyCProgram.c (Groß-/Kleinschreibung ignorieren) im aktuellen Verzeichnis und allen seinen Unterverzeichnissen.
# find -iname "MyCProgram.c" ./mycprogram.c ./backup/mycprogram.c ./backup/MyCProgram.c ./MyCProgram.c
3. Beschränken Sie die Suche auf eine bestimmte Verzeichnisebene mit mindepth und maxdepth
Suchen Sie die passwd-Datei unter allen Unterverzeichnissen, beginnend mit dem Stammverzeichnis.
# find / -name passwd ./usr/share/doc/nss_ldap-253/pam.d/passwd ./usr/bin/passwd ./etc/pam.d/passwd ./etc/passwd
Suchen Sie die passwd-Datei unter root und eine Ebene tiefer. (d. h. Root – Ebene 1 und ein Unterverzeichnis – Ebene 2)
# find -maxdepth 2 -name passwd ./etc/passwd
Suchen Sie die passwd-Datei unter root und zwei Ebenen tiefer. (d. h. root — Ebene 1 und zwei Unterverzeichnisse — Ebene 2 und 3)
# find / -maxdepth 3 -name passwd ./usr/bin/passwd ./etc/pam.d/passwd ./etc/passwd
Suchen Sie die Passwortdatei zwischen Unterverzeichnisebene 2 und 4.
# find -mindepth 3 -maxdepth 5 -name passwd ./usr/bin/passwd ./etc/pam.d/passwd
4. Ausführen von Befehlen für die vom Find-Befehl gefundenen Dateien.
Im folgenden Beispiel berechnet der find-Befehl die md5-Summe aller Dateien mit dem Namen MyCProgram.c (Groß-/Kleinschreibung ignorieren). {} wird durch den aktuellen Dateinamen ersetzt.
# find -iname "MyCProgram.c" -exec md5sum {} \; d41d8cd98f00b204e9800998ecf8427e ./mycprogram.c d41d8cd98f00b204e9800998ecf8427e ./backup/mycprogram.c d41d8cd98f00b204e9800998ecf8427e ./backup/MyCProgram.c d41d8cd98f00b204e9800998ecf8427e ./MyCProgram.c
5. Invertieren des Spiels.
Zeigt die Dateien oder Verzeichnisse an, deren Name nicht MyCProgram.c ist. Da die maximale Tiefe 1 ist, wird dies nur im aktuellen Verzeichnis angezeigt.
# find -maxdepth 1 -not -iname "MyCProgram.c" . ./MybashProgram.sh ./create_sample_files.sh ./backup ./Program.c
6. Suchen von Dateien anhand ihrer Inode-Nummer.
Jede Datei hat eine eindeutige Inode-Nummer, mit der wir diese Datei identifizieren können. Erstellen Sie zwei Dateien mit ähnlichem Namen. d.h. eine Datei mit einem Leerzeichen am Ende.
# touch "test-file-name" # touch "test-file-name " [Note: There is a space at the end] # ls -1 test* test-file-name test-file-name
Aus der ls-Ausgabe können Sie nicht erkennen, welche Datei das Leerzeichen am Ende hat. Mit der Option -i können Sie die Inode-Nummer der Datei anzeigen, die für diese beiden Dateien unterschiedlich sein wird.
# ls -i1 test* 16187429 test-file-name 16187430 test-file-name
Sie können die Inode-Nummer in einem Suchbefehl wie unten gezeigt angeben. In diesem Beispiel benennt der Befehl find eine Datei unter Verwendung der Inode-Nummer um.
# find -inum 16187430 -exec mv {} new-test-file-name \; # ls -i1 *test* 16187430 new-test-file-name 16187429 test-file-name
Sie können diese Technik verwenden, wenn Sie einige Operationen mit Dateien durchführen möchten, die schlecht benannt sind, wie im folgenden Beispiel gezeigt. Beispielsweise enthält die Datei mit dem Namen — file?.txt ein Sonderzeichen. Wenn Sie versuchen, „rm file?.txt“ auszuführen, werden alle folgenden drei Dateien entfernt. Befolgen Sie also die nachstehenden Schritte, um nur die Datei „file?.txt“ zu löschen.
# ls file1.txt file2.txt file?.txt
Finden Sie die Inode-Nummern jeder Datei.
# ls -i1 804178 file1.txt 804179 file2.txt 804180 file?.txt
Verwenden Sie die Inode-Nummer, um die Datei zu entfernen, die Sonderzeichen enthielt, wie unten gezeigt.
# find -inum 804180 -exec rm {} \; # ls file1.txt file2.txt [Note: The file with name "file?.txt" is now removed]
7. Datei anhand der Dateiberechtigungen finden
Folgende Operationen sind möglich.
- Dateien finden, die genau der Berechtigung entsprechen
- Überprüfen, ob die gegebene Berechtigung passt, unabhängig von anderen Berechtigungsbits
- Suche mit oktaler / symbolischer Darstellung
Nehmen wir für dieses Beispiel an, dass das Verzeichnis die folgenden Dateien enthält. Bitte beachten Sie, dass die Dateiberechtigungen für diese Dateien unterschiedlich sind.
# ls -l total 0 -rwxrwxrwx 1 root root 0 2009-02-19 20:31 all_for_all -rw-r--r-- 1 root root 0 2009-02-19 20:30 everybody_read ---------- 1 root root 0 2009-02-19 20:31 no_for_all -rw------- 1 root root 0 2009-02-19 20:29 ordinary_file -rw-r----- 1 root root 0 2009-02-19 20:27 others_can_also_read ----r----- 1 root root 0 2009-02-19 20:27 others_can_only_read
Dateien finden, die Leseberechtigung für die Gruppierung haben. Verwenden Sie den folgenden Befehl, um alle Dateien in Ihrem Home-Verzeichnis zu finden, die von der Welt gelesen werden können, unabhängig von anderen Berechtigungen für diese Datei.
# find . -perm -g=r -type f -exec ls -l {} \; -rw-r--r-- 1 root root 0 2009-02-19 20:30 ./everybody_read -rwxrwxrwx 1 root root 0 2009-02-19 20:31 ./all_for_all ----r----- 1 root root 0 2009-02-19 20:27 ./others_can_only_read -rw-r----- 1 root root 0 2009-02-19 20:27 ./others_can_also_read
Dateien finden, die nur Leseberechtigung für die Gruppe haben.
# find . -perm g=r -type f -exec ls -l {} \; ----r----- 1 root root 0 2009-02-19 20:27 ./others_can_only_read
Dateien finden, die nur Leseberechtigung haben, um gruppiert zu werden [Suche nach Oktal]
# find . -perm 040 -type f -exec ls -l {} \; ----r----- 1 root root 0 2009-02-19 20:27 ./others_can_only_read
8. Finden Sie alle leeren Dateien (Null-Byte-Datei) in Ihrem Home-Verzeichnis und seinem Unterverzeichnis
Die meisten Dateien der folgenden Befehlsausgabe sind Sperrdateien und Platzhalter, die von anderen Anwendungen erstellt wurden.
# find ~ -empty
Alle leeren Dateien nur in Ihrem Home-Verzeichnis auflisten.
# find . -maxdepth 1 -empty
Nur die nicht versteckten leeren Dateien nur im aktuellen Verzeichnis auflisten.
# find . -maxdepth 1 -empty -not -name ".*"
9. Finden der 5 größten Dateien
Der folgende Befehl zeigt die 5 größten Dateien im aktuellen Verzeichnis und seinem Unterverzeichnis an. Abhängig von der Gesamtzahl der Dateien, die der Befehl verarbeiten muss, kann die Ausführung eine Weile dauern.
# find . -type f -exec ls -s {} \; | sort -n -r | head -5
10. Finden der Top 5 kleinen Dateien
Die Technik ist die gleiche wie bei der Suche nach größeren Dateien, aber der einzige Unterschied in der Sortierung ist die aufsteigende Reihenfolge.
# find . -type f -exec ls -s {} \; | sort -n | head -5
Im obigen Befehl werden Sie höchstwahrscheinlich nur die NULL-Byte-Dateien (leere Dateien) sehen. Sie können also den folgenden Befehl verwenden, um die kleineren Dateien außer den NULL-Byte-Dateien aufzulisten.
# find . -not -empty -type f -exec ls -s {} \; | sort -n | head -5
11. Suchen Sie Dateien anhand des Dateityps mit der Option -type
Finde nur die Socket-Dateien.
# find . -type s
Alle Verzeichnisse finden
# find . -type d
Nur die normalen Dateien finden
# find . -type f
Alle versteckten Dateien finden
# find . -type f -name ".*"
Alle versteckten Verzeichnisse finden
# find -type d -name ".*"
12. Finden Sie Dateien, indem Sie sie mit der Änderungszeit anderer Dateien vergleichen.
Dateien anzeigen, die nach der angegebenen Datei geändert wurden. Der folgende find-Befehl zeigt alle Dateien an, die nach der gewöhnlichen_Datei erstellt/geändert werden.
# ls -lrt total 0 -rw-r----- 1 root root 0 2009-02-19 20:27 others_can_also_read ----r----- 1 root root 0 2009-02-19 20:27 others_can_only_read -rw------- 1 root root 0 2009-02-19 20:29 ordinary_file -rw-r--r-- 1 root root 0 2009-02-19 20:30 everybody_read -rwxrwxrwx 1 root root 0 2009-02-19 20:31 all_for_all ---------- 1 root root 0 2009-02-19 20:31 no_for_all # find -newer ordinary_file . ./everybody_read ./all_for_all ./no_for_all
13. Dateien nach Größe suchen
Mit der Option -size können Sie Dateien nach Größe finden.
Dateien finden, die größer als die angegebene Größe sind
# find ~ -size +100M
Dateien finden, die kleiner als die angegebene Größe sind
# find ~ -size -100M
Dateien finden, die genau der angegebenen Größe entsprechen
# find ~ -size 100M
Hinweis:– bedeutet weniger als die angegebene Größe, + bedeutet mehr als die angegebene Größe, und kein Symbol bedeutet exakt angegebene Größe.
14. Alias für häufige Suchvorgänge erstellen
Wenn Sie etwas ziemlich nützlich finden, können Sie es als Alias verwenden. Und führen Sie es aus, wann immer Sie wollen.
Entfernen Sie regelmäßig die Dateien mit dem Namen a.out.
# alias rmao="find . -iname a.out -exec rm {} \;" # rmao
Entfernen Sie die vom C-Programm generierten Kerndateien.
# alias rmc="find . -iname core -exec rm {} \;" # rmc
15. Entfernen Sie große Archivdateien mit dem Befehl find
Der folgende Befehl entfernt *.zip-Dateien, die über 100 MB groß sind.
# find / -type f -name *.zip -size +100M -exec rm -i {} \;"
Entfernen Sie alle *.tar-Dateien, die größer als 100 MB sind, mit dem Alias rm100m (Remove 100M). Verwenden Sie ähnliche Konzepte und erstellen Sie Aliasnamen wie rm1g, rm2g, rm5g, um Dateien mit einer Größe von mehr als 1 GB, 2 GB bzw. 5 GB zu entfernen.
# alias rm100m="find / -type f -name *.tar -size +100M -exec rm -i {} \;" # alias rm1g="find / -type f -name *.tar -size +1G -exec rm -i {} \;" # alias rm2g="find / -type f -name *.tar -size +2G -exec rm -i {} \;" # alias rm5g="find / -type f -name *.tar -size +5G -exec rm -i {} \;" # rm100m # rm1g # rm2g # rm5g
Befehlsbeispiele finden, zweiter Teil
Wenn Ihnen dieser Mommy-Artikel über den Find-Befehl gefallen hat, vergessen Sie nicht, sich den Daddy-Artikel des Find-Befehls anzusehen – Daddy, ich habe ihn gefunden!, 15 fantastische Linux-Find-Befehlsbeispiele (Teil 2)
Tolle Linux-Artikel
Es folgen einige tolle 15 Beispiele Artikel, die Sie möglicherweise hilfreich finden.
- 15 Beispiele zur Beherrschung der Linux-Befehlszeilengeschichte
- Unix LS-Befehl:15 praktische Beispiele
- Bekomme den Grep in den Griff! – 15 praktische Grep-Befehlsbeispiele
- Linux Crontab:15 fantastische Cron-Job-Beispiele