Eine Suche mit locate
findet Pfade im Dateisystem.
Oft wissen Sie von vornherein, dass Sie entweder nur an Dateien oder nur an Verzeichnissen interessiert sind.
Eine Suche nach Orten liefert oft viele Ergebnisse. Es wäre nützlich, nur einen der Typen in das Ergebnis aufzunehmen, da dies die Ausgabe verkürzt.
Es gibt jedoch ein interessanteres Argument, Dateien oder Verzeichnisse wegzulassen: Die Liste der Ergebnispfade kann nicht nur theoretisch mehrdeutig sein.
Das folgende Beispiel ist ein realer Fall und nicht ungewöhnlich:
$ locate --regex --basename "xfce4-keyboard-overlay$"
/usr/local/bin/xfce4-keyboard-overlay
/usr/local/share/xfce4-keyboard-overlay
Ok, wir haben was gefunden! Aber ... Dateien oder Verzeichnisse?
$ file /usr/local/bin/xfce4-keyboard-overlay
/usr/local/bin/xfce4-keyboard-overlay: bash script
Das ist also eine Datei ...
$ file /usr/local/share/xfce4-keyboard-overlay
/usr/local/share/xfce4-keyboard-overlay: directory
während die zweite nicht ist.
Diese Mehrdeutigkeit erschwert das Lesen langer Pfadlisten locate
. Es wäre also sehr hilfreich, Verzeichnisse herauszufiltern, beispielsweise mit einer Kommandozeilenoption für .
Gibt es so etwas? Auch wenn der Filter für Verzeichnisse von locate getrennt ist?
Zumindest könnte man ein Skript verwenden, um alle zu überprüfenden Dateinamen zu iterieren - was langsam sein kann.
while
Anweisung bewirkt?