fsq
('파일 시스템 쿼리' - 발음은 'fisk') 유틸리티는 SQL과 유사한 표현 언어를 사용하여 파일 시스템에 대해 임시 쿼리를 수행하기 위한 도구입니다. 이는 일회성 스크립트를 작성하지 않고도 특정 기준과 일치하는 파일을 찾는 데 유용합니다.
해당 플랫폼에 맞는 바이너리를 다운로드하여 명령줄 경로에 추가하세요.
fsq
단일 인수인 표현식을 사용합니다. 이 표현식은 다음 부분으로 구성됩니다.
<attribute list> [not] in <locations> where <conditions>
'hello' 문자로 시작하고 5MB보다 큰 '/data' 디렉터리 아래의 모든 파일을 재귀적으로 찾으려면 다음 쿼리를 사용할 수 있습니다.
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
제외한 현재 디렉터리 아래의 모든 위치에서 "implements MyInterface" 문자열이 포함된 파일을 검색합니다.
fsq "path not in '.git' where content contains 'implements MyInterface'"
속성 목록은 fsq
에 의해 표준 출력으로 인쇄되는 속성을 지정합니다. 위의 경우 이는 파일 이름('name')일 뿐입니다. 다음 예에서는 파일 경로와 크기(바이트)를 모두 인쇄합니다.
fsq "path,size in '/opt' where size > 5m"
name
path
size
fsize
(속성 목록에서 사용할 수 있지만 쿼리할 수는 없음)content
(콘텐츠를 쿼리할 수 있지만 인쇄를 위해 속성 목록에 추가할 수는 없음)modified
(형식: 'MM/DD/YYYY' 또는 'MM/DD/YYYY hh:mm:ss')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
값을 바이트 단위로 비교합니다.
예를 들어, 10KB보다 크고 1MB보다 작은 모든 파일을 찾으려면 다음을 수행합니다.
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