Das Dienstprogramm fsq
(„file system query“ – ausgesprochen „fisk“) ist ein Tool zum Durchführen von Ad-hoc-Abfragen für ein Dateisystem mithilfe einer SQL-ähnlichen Ausdruckssprache. Dies ist nützlich, um Dateien zu finden, die bestimmte Kriterien erfüllen, ohne dafür ein einmaliges Skript schreiben zu müssen.
Laden Sie die Binärdatei für Ihre Plattform herunter und fügen Sie sie Ihrem Befehlszeilenpfad hinzu.
fsq
benötigt ein einziges Argument: den Ausdruck. Dieser Ausdruck besteht aus folgenden Teilen:
<attribute list> [not] in <locations> where <conditions>
Um rekursiv alle Dateien im Verzeichnis „/data“ zu finden, die mit den Zeichen „hello“ beginnen und größer als 5 MB sind, könnte die folgende Abfrage verwendet werden:
fsq "name in '/data' where name startswith 'hello' and size > 5m"
Wenn der Speicherort (im obigen Fall „/data“) weggelassen wird, verwendet fsq
standardmäßig das aktuelle Verzeichnis:
fsq "name where name startswith 'hello' and size > 5m"
Es können auch mehrere Standorte angegeben werden:
fsq "name in '/opt', '/media' where size > 5m"
Standorte können ebenfalls ausgeschlossen werden. Im folgenden Beispiel werden alle Speicherorte im aktuellen Verzeichnis außer .git
nach Dateien durchsucht, die die Zeichenfolge „implements MyInterface“ enthalten:
fsq "path not in '.git' where content contains 'implements MyInterface'"
Die Attributliste gibt an, welche Attribute von fsq
standardmäßig ausgegeben werden. Im obigen Fall ist dies nur der Dateiname („name“). Das folgende Beispiel gibt sowohl den Pfad zur Datei als auch die Größe (in Bytes) aus:
fsq "path,size in '/opt' where size > 5m"
name
path
size
fsize
(kann in der Attributliste verwendet, aber nicht abgefragt werden)content
(Inhalt kann abgefragt, aber nicht zur Attributliste zum Drucken hinzugefügt werden)modified
(Format: „MM/TT/JJJJ“ oder „MM/TT/JJJJ hh:mm:ss“)sha1
sha256
md5
stats
(können in der Attributliste verwendet, aber nicht abgefragt werden)<
<=
>
>=
=
!=
startswith
endswith
isdir
(dieser Operator akzeptiert keine Argumente)isfile
(dieser Operator akzeptiert keine Argumente)contains
ignorecase
(muss gefolgt von „=“, „!=“, „startswith“, „endswith“ oder „contains“ sein)matches
(Übereinstimmung mit regulären Ausdrücken)Zur Gruppierung von Bedingungen können Klammern sowie die logischen Operatoren or , and , und not verwendet werden. Zum Beispiel:
fsq "name in '.' where name startswith 'hello' or (isdir and not name startswith 'world')"
Die folgenden Größenqualifizierer können an Ganzzahlwerte angehängt werden, um nicht standardmäßige Einheiten anzugeben. Diese sind besonders nützlich, wenn Sie Dateigrößen in Ausdrücken angeben. Wenn an eine Ganzzahl kein Größenqualifizierer angehängt wird, vergleicht fsq
den Wert in Bytes.
Um beispielsweise alle Dateien zu finden, die größer als 10 Kilobyte und kleiner als 1 Megabyte sind:
fsq "path where size > 10k and size < 1m"
Zum Erstellen fsq
ist der go
-Compiler erforderlich. Wenn Sie make
installiert haben, kann fsq
installiert werden mit:
make install
Andernfalls müssen die folgenden Befehle im fsq
-Verzeichnis ausgeführt werden:
go get golang.org/x/tools/cmd/goyacc
go install golang.org/x/tools/cmd/goyacc
goyacc parser.y
go install