2017-12-27 33 views
0

Ich habe ein ziemlich interessantes Problem, das ich versuche, die optimale Lösung für zu finden. Ich erstelle ein Dateiautokomplettierungs-Backend für Emacs. Das bedeutet, dass ich den Linux-Befehl find verwende, um Dateien und Verzeichnisse zu erhalten.Unix finden Liste passende Verzeichnisse

Das Backend eine Datei mit einem teilweise fertiggestellten Pfad angegeben wird (zB /usr/folder/foo) und ich möchte alle Dateien und Verzeichnisse greifen, die den Teilpfad für zwei Verzeichnisse nach unten (zB zum Beispiel passen könnten es foo_bar/ bieten könnte, foo_bar/bar, foo_bar/baz , foo_bar/bat/foo_baz). Bisher war ich nur dies in 3 Schritten zu brechen

alle Dateien im aktuellen Verzeichnis finden, die das Präfix übereinstimmen kann

find foo* -type f -maxdepth 1 

sammeln alle möglichen Verzeichnisse wir durch

find foo* -type d -maxdepth 1 
suchen möchten

jedes dieser Verzeichnisse verwenden, um 2 weitere Anrufe zu finden (ich brauche zwischen Dateien und Verzeichnissen unterscheiden können)

find foo_bar/ -type d -maxdepth 1 
find foo_bar/ -type f -maxdepth 1 

Diese Lösung beinhaltet viel von Aufrufen an find (vor allem, weil der letzte Schritt für jedes übereinstimmende Verzeichnis aufgerufen werden muss). Dies führt dazu, dass Kandidaten besonders in großen Dateisystemen langsam werden. Idealerweise möchte ich nur einen Anruf machen, um alle Kandidaten zu bekommen. Aber ich habe keinen guten Weg gefunden, das zu tun. Kennt jemand eine optimale Lösung?

Antwort

0

auf der Suche nach der find Manpage, endete ich mit -printf.

find -L foo* -maxdepth 1 -printf '%p\t%y\n' 

gibt mir alles, was ich brauchte. nur ein Befehl, differenzieren zwischen Dateien und Verzeichnissen, Suchtiefe usw.

Verwandte Themen