Утилита fsq
(«запрос файловой системы» — произносится как «фиск») — это инструмент для выполнения специальных запросов к файловой системе с использованием SQL-подобного языка выражений. Это полезно для поиска файлов, соответствующих определенным критериям, без написания для этого одноразового сценария.
Загрузите двоичный файл для своей платформы и добавьте его в путь командной строки.
fsq
принимает единственный аргумент: выражение. Это выражение состоит из следующих частей:
<attribute list> [not] in <locations> where <conditions>
Чтобы рекурсивно найти все файлы в каталоге «/data», которые начинаются с символов «привет» и имеют размер более 5 МБ, можно использовать следующий запрос:
fsq "name in '/data' where name startswith 'hello' and size > 5m"
Если местоположение (в приведенном выше случае «/data») опущено, fsq
по умолчанию будет использовать текущий каталог:
fsq "name where name startswith 'hello' and size > 5m"
Также можно указать несколько местоположений:
fsq "name in '/opt', '/media' where size > 5m"
Местоположение также может быть исключено. В следующем примере во всех местах текущего каталога, за исключением .git
будет выполняться поиск файлов, содержащих строку «реализует MyInterface»:
fsq "path not in '.git' where content contains 'implements MyInterface'"
Список атрибутов указывает, какие атрибуты выводятся в стандартный вывод с помощью fsq
. В приведенном выше случае это просто имя файла («имя»). В следующем примере будет выведен путь к файлу и его размер (в байтах):
fsq "path,size in '/opt' where size > 5m"
name
path
size
fsize
(может использоваться в списке атрибутов, но не может быть запрошен)content
(контент можно запросить, но нельзя добавить в список атрибутов для печати)modified
(формат: «ММ/ДД/ГГГГ» или «ММ/ДД/ГГГГ чч:мм:сс»)sha1
sha256
md5
stats
(может использоваться в списке атрибутов, но не может быть запрошена)<
<=
>
>=
=
!=
startswith
endswith
isdir
(этот оператор не принимает никаких аргументов)isfile
(этот оператор не принимает никаких аргументов)contains
ignorecase
(должен следовать '=', '!=', 'startswith', 'endswith' или 'contains')matches
(соответствие регулярному выражению)Круглые скобки, а также логические операторы или , и , и not могут использоваться для группировки условий. Например:
fsq "name in '.' where name startswith 'hello' or (isdir and not name startswith 'world')"
Следующие квалификаторы размера могут быть добавлены к целочисленным значениям, чтобы указать единицы измерения, отличные от значений по умолчанию. Это особенно полезно при указании размеров файлов в выражениях. Если к целому числу не добавлен квалификатор размера, fsq
сравнивает значение в байтах.
Например, чтобы найти все файлы размером более 10 килобайт и менее 1 мегабайта:
fsq "path where size > 10k and size < 1m"
Для сборки fsq
необходим компилятор go
. Если у вас установлен make
, fsq
можно установить с помощью:
make install
В противном случае, находясь в каталоге fsq
необходимо будет выполнить следующие команды:
go get golang.org/x/tools/cmd/goyacc
go install golang.org/x/tools/cmd/goyacc
goyacc parser.y
go install