fzf
fzf
는 명령줄에서 빠르고 효율적으로 파일을 찾거나, 히스토리에서 명령어를 검색하거나, 프로세스를 선택하는 등
퍼지 검색 기능을 제공하는 범용적인 대화형 필터 도구입니다.
주요 특징
특징 | 설명 |
---|---|
퍼지 검색 | 입력한 문자열이 정확히 일치하지 않더라도 유사한 패턴을 가진 결과를 찾습니다. 예를 들어, abc 를 검색하면 axbyc 같은 결과도 같이 찾아줍니다! |
대화형 인터페이스 | fzf 를 실행하면 별도의 터미널 화면이 열리고, 실시간으로 검색어를 입력하면서 결과 목록이 필터링 됩니다 |
확장성 | 사용자 정의 스크립트나 외부 명령어와 쉽게 연동하여 기능 확장이 가능합니다 |
fzf
작동 방식
fzf
는 기본적으로 다음의 파이프라인을 통해 작동해요.
데이터 소스 | fzf [옵션] | 선택된 결과 처리
데이터 소스
:ls
,find
,history
,ps
등 어떤 명령의 출력이라도 될 수 있습니다.fzf
: 표준 입력으로 받은 데이터를 필터링하고, 사용자에게 대화형 인터페이스를 제공하여 선택하게 합니다.선택된 결과 처리
: 사용자가Enter
를 눌러 선택한 항목은fzf
의 표준 출력(stdout
)으로 나옵니다. 이 출력을 다른 명령의 인수로 사용하거나 변수에 저장할 수 있어요.
설치
# Debian
sudo apt install fzf
# Arch
sudo yay -S fzf
# Rhel
sudo dnf install fzf
fzf
사용 예제
다양한 활용 예시를 통해 fzf
의 기능을 살펴볼게요.
1. 기본 파일 검색
현재 디렉토리와 하위 디렉토리의 모든 파일을 검색합니다.
find . -type f | fzf
2. 디렉토리 이동
cd
명령과 함께 사용하여 디렉토리를 쉽게 이동할 수 있습니다.
fzf
를 통해 디렉토리를 선택하고, 해당 디렉토리로 이동하는 함수를 ~/.bashrc
또는 ~/.zshrc
에 추가하여 사용해보세요.
# ~/.bashrc 또는 ~/.zshrc 에 추가
fd() {
local dir
dir=$(find "${1:-.}" -type d 2> /dev/null | fzf +m)
[ -z "$dir" ] && return
cd "$dir"
}
위 코드를 추가한 후 터미널에 fd
를 입력하면 현재 디렉토리의 하위 디렉토리를 검색하여 이동이 가능합니다.
추가로 fd ~/project
와 같이 인수를 넘겨주면 해당 경로 아래에서 검색합니다.
fzf
로 대화형 스크립트 구현하기
이번 챕터에서는 fzf
를 사용하여 대화형 스크립트 예제를 몇 개 작성해볼게요.
1. 로그 파일에서 패턴 선택 후 검색
#!/usr/bin/bash
# 대규모 로그에서 흔한 패턴 추출
patterns=$(cat /var/log/pacman.log | grep -oE '\b[a-zA-Z]+\b' | sort | uniq)
pattern=$(echo "$patterns" | fzf --prompt="검색할 패턴 선택: ")
echo "선택된 패턴: $pattern"
echo "관련 로그 출력"
grep "$pattern" /var/log/pacman.log | less
2. 함수별 실행 메뉴 구현
#!/usr/bin/bash
add_rule() {
echo "add_rule"
}
insert_rule() {
echo "insert_rule"
}
main_menu() {
options=(
"Add Rule"
"Insert Rule"
"Delete Rule"
"Set Default Policy"
"Show Current Rules"
"Exit"
)
choice=$(printf "%s\n" "${options[@]}" | fzf --prompt="옵션을 선택하세요: ")
case "$choice" in
"Add Rule") add_rule ;;
"Insert Rule") insert_rule ;;
"Exit") echo "종료할게요!"; exit 0 ;;
esac
}
main_menu