Blog
Find lernen - Suche nach Dateien und Verzeichnissen unter Linux/Mac

Manchmal müssen Sie Dateien und Ordner auf einem Computer finden. Wenn Sie an einem Terminal in einem entfernten System arbeiten, gibt es kein Apple Spotlight, das Ihnen beim Durchsuchen Ihrer Server hilft. Glücklicherweise verfügen sowohl Linux als auch Mac über ein Befehlszeilentool namens 'find', das uns hilft, Dateien und Verzeichnisse zu finden. Es kann sogar Dateien und Verzeichnisse in großen Mengen verarbeiten. Lassen Sie uns heute etwas über 'find' lernen!
Beispiel Verzeichnis
Ich habe ein Beispielverzeichnis vorbereitet, um einige der Suchfunktionen von find zu testen. Klonen Sie einfach das Repository und starten Sie eine Terminalsitzung in diesem Verzeichnis.
Finden Sie
Der Befehl find durchsucht ein bestimmtes Verzeichnis (und seine Unterverzeichnisse) nach Dateien auf der Grundlage einer Vielzahl von Attributen. Wenn wir man find eingeben, lesen wir das Folgende:
NAME
find -- walk a file hierarchy
SYNOPSIS
find [-H | -L | -P] [-EXdsx] [-f path] path ... [expression]
find [-H | -L | -P] [-EXdsx] -f path [path ...] [expression]
content
The find utility recursively descends the directory tree for each path listed, evaluating an expression (composed of the ``primaries'' and ``operands'' listed below) in terms of each file in the tree.
Alle Dateien und Verzeichnisse suchen
Um nach allen Dateien und Verzeichnissen zu suchen, geben Sie ein:
$ find .
.
./LICENSE
./bin
./bin/hello.sh
./bin/bye.sh
./web
...
Nur Dateien suchen
Um nur nach Dateien zu suchen, geben Sie ein:
$ find . -type f
./LICENSE
./bin/hello.sh
./bin/bye.sh
./web/index.html
...
Nur Verzeichnisse suchen
Um nur nach Verzeichnissen zu suchen, geben Sie ein:
$ find . -type d
.
./bin
./web
./web/img
./java
./test-dir
./.git
...
Eine Datei mit einem bestimmten Namen suchen
So suchen Sie nach einer Datei mit einem Namenstyp:
$ find . -type f -name "test1.txt"
./test-dir/test1.txt
Verwenden Sie einen Platzhalter *, um die Suche zu erweitern:
$ find . -type f -name "test*.txt"
./test-dir/test7.txt
./test-dir/test6.txt
./test-dir/test4.txt
./test-dir/test5.txt
./test-dir/test1.txt
./test-dir/test2.txt
./test-dir/test3.txt
./test-dir/test10.txt
./test-dir/test8.txt
./test-dir/test9.txt
Dateien ohne Berücksichtigung der Groß-/Kleinschreibung suchen
Um nach Dateien ohne Berücksichtigung der Groß-/Kleinschreibung zu suchen, geben Sie ein:
$ find . -type f -iname "test*.txt"
./test-dir/test7.txt
./test-dir/test6.txt
./test-dir/test4.txt
./test-dir/test5.txt
./test-dir/test1.txt
./test-dir/test2.txt
./test-dir/test3.txt
./test-dir/TEST_8.txt
./test-dir/TEST_9.txt
./test-dir/TEST_10.txt
./test-dir/test10.txt
./test-dir/TEST_2.txt
./test-dir/TEST_3.txt
./test-dir/TEST_1.txt
./test-dir/TEST_4.txt
./test-dir/TEST_5.txt
...
Um nach Python-Dateien zu suchen, geben Sie ein:
$ find . -type f -iname "*.py"
./test-dir/test.py
Um nach allen Bilddateien zu suchen, geben Sie ein:
$ find . -type f -iname "*.jpg"
./michael-sum-565770-unsplash.jpg
./jonas-vincent-2717-unsplash.jpg
./web/img/michael-sum-565770-unsplash.jpg
./web/img/jonas-vincent-2717-unsplash.jpg
./web/img/raul-varzar-750436-unsplash.jpg
./web/img/jari-hytonen-538885-unsplash.jpg
./web/img/karina-vorozheeva-666313-unsplash.jpg
./web/img/nathalie-jolie-681356-unsplash.jpg
./web/img/eric-han-455080-unsplash.jpg
./web/img/mikhail-vasilyev-253977-unsplash.jpg
./raul-varzar-750436-unsplash.jpg
./jari-hytonen-538885-unsplash.jpg
./karina-vorozheeva-666313-unsplash.jpg
./nathalie-jolie-681356-unsplash.jpg
./eric-han-455080-unsplash.jpg
./mikhail-vasilyev-253977-unsplash.jpg
Dateien auf Basis der Zeit finden
Um nach Dateien zu suchen, können wir den Befehl mmin, amin, cmin, mtime, atime oder ctime. Das 'cma' bedeutet erstellt, geändert oder zugegriffen. Das 'min' steht für Minuten und das 'time' für Tage. Um nach Dateien zu suchen, die vor weniger als 10 Minuten erstellt wurden, geben Sie ein:
$ find . -type f -ctime -10
./LICENSE
./bin/hello.sh
./bin/bye.sh
./web/index.html
./web/readme.md
...
Um nach Dateien zu suchen, die vor mehr als 10 Tagen geändert wurden, geben Sie ein:
$ find . -type f -mtime +10
Dateien nach Dateigröße suchen
Um nach Dateien über 5 Megabyte zu suchen, geben Sie ein:
$ find . -size +5M
./web/img/jari-hytonen-538885-unsplash.jpg
./.git/objects/f2/d996ce562ad4203c33331f52824fb0e54d050f
Um nach Dateien mit weniger als 1 MB zu suchen, geben Sie ein:
find . -size -1MB
.
./LICENSE
./bin
./bin/hello.sh
./bin/bye.sh
...
Um nach leeren Dateien zu suchen, geben Sie ein:
$ find . -type f -empty
./bin/hello.sh
./bin/bye.sh
./web/readme.md
./java/readme.md
./test-dir/test7.txt
./test-dir/test6.txt
...
Suche nach Zugriffsberechtigungen
Um nach Dateien auf der Basis von Zugriffsrechten zu suchen, geben Sie ein:
$ find . -perm 777
./web/index.html
./web/readme.md
./web/img
./web/img/michael-sum-565770-unsplash.jpg
./web/img/jonas-vincent-2717-unsplash.jpg
./web/img/raul-varzar-750436-unsplash.jpg
./web/img/jari-hytonen-538885-unsplash.jpg
./web/img/karina-vorozheeva-666313-unsplash.jpg
./web/img/nathalie-jolie-681356-unsplash.jpg
./web/img/eric-han-455080-unsplash.jpg
./web/img/mikhail-vasilyev-253977-unsplash.jpg
Ausführen von Befehlen auf das Ergebnis
können wir einen Befehl in Batch auf das Suchergebnis ausführen. Beachten Sie den Teil
find . -size +5M -exec ls -alh {} +
-r--r--r-- 1 dennis staff 8.8M Nov 19 04:41 ./.git/objects/f2/d996ce562ad4203c33331f52824fb0e54d050f
-rwxrwxrwx@ 1 dennis staff 8.9M Nov 19 04:33 ./web/img/jari-hytonen-538885-unsplash.jpg
Lassen Sie uns etwas mit den Dateien tun, die die Berechtigung '777' haben. Ändern wir sie in '664':
$ find . -type f -perm 777 -exec chmod 664 {} +
$ find . -type f -perm 664
./web/index.html
./web/readme.md
./web/img/michael-sum-565770-unsplash.jpg
./web/img/jonas-vincent-2717-unsplash.jpg
./web/img/raul-varzar-750436-unsplash.jpg
./web/img/jari-hytonen-538885-unsplash.jpg
./web/img/karina-vorozheeva-666313-unsplash.jpg
./web/img/nathalie-jolie-681356-unsplash.jpg
./web/img/eric-han-455080-unsplash.jpg
./web/img/mikhail-vasilyev-253977-unsplash.jpg
Lassen Sie uns das Verzeichnis mit der Berechtigung '777' in '775' ändern:
$ find . -type d -perm 777
./web/img
$ find . -type d -perm 777 -exec chmod 775 {} +
$ find . -type d -perm 775
./web/img
Tiefe der Suche
Um nur nach Dateien im aktuellen Verzeichnis zu suchen, verwenden Sie die Option 'maxdepth':
$ find . -type f -iname "*.jpg" -maxdepth 1
./michael-sum-565770-unsplash.jpg
./jonas-vincent-2717-unsplash.jpg
./raul-varzar-750436-unsplash.jpg
./jari-hytonen-538885-unsplash.jpg
./karina-vorozheeva-666313-unsplash.jpg
./nathalie-jolie-681356-unsplash.jpg
./eric-han-455080-unsplash.jpg
./mikhail-vasilyev-253977-unsplash.jpg
Lassen Sie uns diese Dateien entfernen:
$ find . -type f -iname "*.jpg" -maxdepth 1 -exec rm {} +
$ find . -type f -iname "*.jpg" -maxdepth 1
<empty>
Fazit
Find ist sowohl unter Linux als auch unter Mac verfügbar. Wenn Sie ein paar Optionen kennen, können Sie effektiv nach Verzeichnissen und Dateien suchen. Mit der Option 'exec' können Sie auch mit dem Suchergebnis arbeiten. Wenn Sie Find effektiv einsetzen, können Sie bei Dateioperationen eine Menge Zeit sparen.
Verfasst von
Dennis Vriend
Contact