O utilitário fsq
('file system query' - pronunciado 'fisk') é uma ferramenta para fazer consultas ad-hoc em um sistema de arquivos usando uma linguagem de expressão semelhante a SQL. Isso é útil para localizar arquivos que correspondam a determinados critérios sem escrever um script único para fazer isso.
Baixe o binário para sua plataforma e adicione-o ao caminho da linha de comando.
fsq
leva um único argumento: a expressão. Esta expressão é composta pelas seguintes partes:
<attribute list> [not] in <locations> where <conditions>
Para encontrar recursivamente todos os arquivos no diretório '/data' que começam com os caracteres 'hello' e são maiores que 5 MB, a seguinte consulta pode ser usada:
fsq "name in '/data' where name startswith 'hello' and size > 5m"
Se o local (no caso acima, '/data') for omitido, fsq
assumirá o diretório atual como padrão:
fsq "name where name startswith 'hello' and size > 5m"
Vários locais também podem ser especificados:
fsq "name in '/opt', '/media' where size > 5m"
Os locais também podem ser excluídos. No exemplo a seguir, todos os locais no diretório atual, exceto .git
serão pesquisados em busca de arquivos contendo a string "implements MyInterface":
fsq "path not in '.git' where content contains 'implements MyInterface'"
A lista de atributos especifica quais atributos são impressos como padrão por fsq
. No caso acima, este é apenas o nome do arquivo ('nome'). O exemplo a seguir imprimirá o caminho do arquivo e o tamanho (em bytes):
fsq "path,size in '/opt' where size > 5m"
name
path
size
fsize
(pode ser usado na lista de atributos, mas não pode ser consultado)content
(o conteúdo pode ser consultado, mas não pode ser adicionado à lista de atributos para impressão)modified
(formato: 'MM/DD/AAAA' ou 'MM/DD/AAAA hh:mm:ss')sha1
sha256
md5
stats
(pode ser usado na lista de atributos, mas não pode ser consultado)<
<=
>
>=
=
!=
startswith
endswith
isdir
(este operador não aceita nenhum argumento)isfile
(este operador não aceita nenhum argumento)contains
ignorecase
(deve ser seguido por '=', '!=', 'startswith', 'endswith' ou 'contains')matches
(correspondência de expressão regular)Parênteses, bem como os operadores lógicos ou , e , e not podem ser usados para agrupar condições. Por exemplo:
fsq "name in '.' where name startswith 'hello' or (isdir and not name startswith 'world')"
Os qualificadores de tamanho a seguir podem ser anexados a valores inteiros para indicar unidades não padrão. Eles são especialmente úteis ao especificar tamanhos de arquivos em expressões. Se nenhum qualificador de tamanho for anexado a um número inteiro, fsq
comparará o valor em bytes.
Por exemplo, para localizar todos os arquivos maiores que 10 kilobytes e menores que 1 megabyte:
fsq "path where size > 10k and size < 1m"
O compilador go
é necessário para construir fsq
. Se você tiver make
instalado, fsq
poderá ser instalado com:
make install
Caso contrário, os seguintes comandos precisarão ser executados no diretório fsq
:
go get golang.org/x/tools/cmd/goyacc
go install golang.org/x/tools/cmd/goyacc
goyacc parser.y
go install