- ffs(file filesystem) 는 JSON, YAML, TOML 같은 반정형 데이터를 파일 시스템으로 마운트해 Unix 셸 도구로 탐색·편집하게 해주는 도구임
- Unix 셸은 문자열 처리 도구가 풍부하지만 기본 데이터 구조가 파일 시스템이라, 트리 형태 데이터 편집에는 잘 맞지 않음
ffs [file]은 파일을 마운트포인트에 연결하고, 언마운트 시 갱신된 결과를 stdout이나 지정한 출력 파일로 내보냄- 파일 쓰기와 디렉터리 생성이 JSON 키와 객체로 변환되며,
1,true,false, 빈 파일은 각각 숫자, 불리언, null 값으로 반영됨 - Linux는 FUSE, macOS는 macFUSE가 필요하고, Windows·FUSE 사용 불가 환경·검색 전용 작업·매우 큰 파일에는 맞지 않을 수 있음
반정형 데이터를 디렉터리처럼 다루기
- ffs는 file filesystem의 약자로, 반정형 데이터를 파일 시스템처럼 마운트해 익숙한 셸 도구로 작업하게 해줌
- 현재 지원 형식은 JSON, YAML, TOML이며, 더 많은 형식 지원이 예정돼 있음
- 자세한 사용법은
ffsmanpage에서 확인할 수 있음
마운트와 편집 흐름
- 기본 실행은
ffs [file]이며,file.blah를file마운트포인트에 마운트하고 최종 갱신본을 stdout으로 출력함 ffs -m MOUNT file로 명시적 마운트포인트를 지정하고,-o OUTPUT으로 출력 파일을 지정할 수 있음ffs -i file은 파일을 제자리에서 편집하며, 볼륨을 언마운트하면 결과가 다시file에 기록됨-
예제에서 보이는 변환 규칙
echo Mikey Indiana >object/name은 JSON의name값을 바꿈echo 1 >object/nose는 문자열이 아니라 숫자1로 반영됨mkdir object/pockets와 그 안의 파일들은 JSON 객체로 변환됨- 빈 파일
mistakes는 JSON에서null로 기록됨
설치 조건과 배포
- Linux에서는 FUSE가 필요함
- macOS에서는 macFUSE가 필요함
- 최신 개발 빌드는 Linux, macOS 단일 실행 파일로 제공됨
- 특정 릴리스는 release page에서 확인할 수 있고, 현재 버전은 0.1.2임
- source에서 빌드할 수도 있음
관련 자료와 비교 지점
- PLOS 2021 논문 “Files-as-Filesystems for POSIX Shell Data Processing”이 있음
- jq와 gron은 명령줄에서 JSON을 다루는 도구임
- ffs는 여러 형식을 지원하고, 익숙한 셸 도구로 편집할 수 있으며, 새 언어를 배울 필요가 없다는 점이 차별점임
- Windows 사용, FUSE 사용 불가, 검색만 필요한 작업, 매우 큰 파일은 ffs에 맞지 않을 수 있음
- 라이선스는 GPLv3임