Mein liebster Unix-Befehl

Achtung – Nerd-Content!

Mein allerliebster Unix-Befehl ist ja find. Zusammen mit der Option -exec lassen sich Dinge realisieren, für die Windows XP seinen dummen Suchhund schon massiv mit Steroiden vollpumpen müsste.

Für Windowsnutzer: Stellt euch einfach vor, der Windowssuchhund würde erstens haarklein und genau nach den Dateien suchen, die ihr ihm angebt und außerdem noch wundervolle Dinge(TM) mit dem Gefundenen anstellen, denen nur eure Fantasie und die Möglichkeiten des Systems Grenzen setzen. Hier einige Beispiele:

Suchen nach vorhandenem Text in allen Dateien im aktuellen Verzeichnis und Unterverzeichnissen (okay, kann der Windowswuffi auch)

find . -exec grep -Hi "foobar" \{\} \;

Suchen nach vorhandenem Text in bestimmten Dateien im aktuellen Verzeichnis und Unterverzeichnissen

find . -name \*.java -exec grep -Hi "foobar" \{\} \;

Löschen von Backupdateien

find . -name \*.bak -exec rm \{\} \;

Normalisieren der Zugriffsrechte für Dateien und Verzeichnisse (Unix only, ich hab gern 755 für die Verzeichnisse und 644 für die Dateien)

find . -type d -exec chmod 755 \{\} \;

find . -type f -exec chmod 644 \{\} \;

Und so weiter. Mit Hilfe von Cygwin lässt sich dieses wundervolle Werkzeug auch unter Windows nutzen. Eine Übersicht über die Optionen von find findet sich hier.

4 Gedanken zu „Mein liebster Unix-Befehl

  1. Lennard

    Es hat einen Moment gedauert, aber ich hab alles verstanden, obwohl ich mich eher im Geek-Bereich ansiedeln würde 😉 Danke für die Tipps!

  2. Thomas Schewe

    Das find mächtig – für mich zu mächtig 😉 – ist, wusste ich schon beim ersten Blick in die man-Page.

    Unix hält so ein paar Perlen von Universal-Tools bereit, mit denen man unglaubliche Dinge anstellen kann; wenn es einem gelingt sie zu beherrschen.

    Das Konstrukt mit dem -exec grep ist genau da, was ich schon öfter gesucht habe…

    Um nicht nur blind abzutippen, sondern zu verstehen, brauche ich etwas (Nach)Hilfe: Was sagt mir das „\{\}\“. Vermute mal, dass die ersten beiden „\“ ein Escapezeichen sind, damit die „{}“ nicht von der shell interpretiert werden. Ãœbergibt dann das geschweifte Klammerpaar den gefundenen Dateinamen? Was bringt das letzte „\“?

  3. Baer

    Und um die Suche noch zu Perfektionieren ein /dev/null dazu!

    find . -exec grep cookie /dev/null {} \;

    Dann wird zusätzlich der Dateiname ausgegeben in der das Gesuchte gefunden wurde!

  4. maggi Beitragsautor

    @Thomas: Genau, die bash zumindest würde die {} sonst anders interpretieren. Genauso der letzte Backslash, er sorgt dafür, dass die -exec-Option auch noch das Semikolon mitbekommt.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert