13P by GN⁺ 14일전 | ★ favorite | 댓글 2개
  • fd는 파일 시스템에서 항목을 찾기 위한 프로그램으로, 기존 find 명령어보다 간단하고 빠르며 사용자 친화적인 대안임
    • find의 모든 기능을 지원하지는 않지만, 일반적인 사용 사례에 대해 합리적인 기본값 제공
  • 윈도우,맥,리눅스
  • 직관적인 문법: fd PATTERN 형식으로 간단하게 사용 가능 (find -iname '*PATTERN*'보다 간편함)
  • 정규 표현식 및 glob 패턴 지원
  • 병렬 디렉토리 탐색으로 빠른 성능 제공
  • 파일 유형에 따른 색상 강조 (ls와 유사)
  • 병렬 명령 실행 지원
  • 스마트 대소문자 구분: 기본적으로 대소문자 무시, 대문자 포함 시 대소문자 구분
  • 숨김 파일 및 디렉토리 기본적으로 무시
  • .gitignore 패턴 기본적으로 무시
  • 명령어 이름이 find보다 50% 짧음

사용법

  • 현재 디렉토리에서 패턴이 포함된 항목 검색 fd netfl
  • 정규 표현식을 사용한 검색 가능 fd '^x.*rc$'
  • 특정 디렉토리에서 검색 fd passwd /etc
  • 현재 디렉토리 아래의 모든 파일 목록 재귀적으로 리스팅 fd
  • 특정 파일 형식 검색 가능 (-e 옵션 사용) fd -e md
  • 정확한 파일명 검색 가능 (-g 옵션 사용) fd -g libc.so /usr
  • 숨김 파일 및 무시된 파일 포함 검색 (-H, -I 옵션 사용) fd -H pre-commit fd -I num_cpu
  • 파일 이름이 아닌 전체 경로에서 검색 (-p 옵션 사용) fd -p '.*/lesson-\d+/[a-z]+.(jpg|png)'
  • 검색된 각 결과에 대해 명령 실행 (-x) fd -e zip -x unzip
  • 모든 검색 결과를 하나의 명령에 전달 (-X) fd -g 'test_*.py' -X vim
  • 자리 표시자(Placeholder) 구문
    • {}: 검색 결과 전체 경로
    • {.}: 파일 확장자 제외 경로
    • {/}: 파일명
    • {//}: 부모 디렉토리
    • {/.}: 파일명에서 확장자 제외
  • 특정 디렉토리 또는 파일 제외 가능 (-E 옵션 사용) fd -H -E .git
  • .fdignore 파일을 만들어 전역 제외 패턴 설정 가능
  • 검색된 파일 삭제 가능 (-X rm) fd -H '^\.DS_Store$' -tf -X rm

주요 명령어 옵션

  • -H: 숨김 파일 및 디렉토리 포함 검색
  • -I: .gitignore 및 .fdignore 무시
  • -p: 전체 경로에서 검색
  • -e: 특정 확장자 검색
  • -x: 검색 결과에 명령 실행
  • -X: 모든 검색 결과를 하나의 명령에 전달
  • -E: 특정 파일 또는 디렉토리 제외

성능 비교 (Benchmark)

  • 750,000개 디렉토리와 400만 개 파일에서 검색 테스트 결과
    • find 성능: 약 19.9초
    • fd 성능: 약 854.8ms
  • find보다 23배 빠름

다른 프로그램과의 통합

  • fd 검색 결과를 fzf에서 표시 가능 export FZF_DEFAULT_COMMAND='fd --type file'
  • fd 출력 결과를 rofi에서 메뉴로 표시 fd --type f -e pdf . $HOME | rofi -dmenu
  • 출력 결과를 트리 구조로 표시 fd | tree --fromfile
  • 검색 결과를 xargs에서 사용 가능 fd -0 -e rs | xargs -0 wc -l

neovim plugin 중에서 fd 사용하는 녀석이 있어서, 설치했다가 지금까지 쓰고 있네요 ㅎㅎ.

Hacker News 의견
  • Alfred workflow를 출시했음. 사용자 정의 디렉토리를 검색하는 데 fd를 많이 사용함. 매일 사용하며 매우 훌륭함
    • Hyperfine도 과소평가된 훌륭한 도구임
  • sharkdp의 팬임. 매일 사용하는 멋진 소프트웨어를 만들어줘서 고마움
    • bat, fd, hexyl, hyperfine을 사용함
    • 잘 보상받는 엔지니어들이 매달 $10씩 기부하면 인터넷이 더 나아질 것임
    • 많은 훌륭한 도구들이 있으며, 이를 지원하는 생태계를 만들어야 함
  • fd, bat, numbat, hexyl, hyperfine을 빠르게 설치하고 스크린샷을 Terminal Trove에서 볼 수 있음
    • fd, bat, numbat, hyperfine, hexyl의 링크 제공
    • 설치와 스크린샷 확인 가능
  • fd와 rg의 플래그가 일치했으면 좋겠음. 예를 들어, fd와 rg 모두 --type 플래그가 있지만 의미가 다름
    • fd는 파일/디렉토리/심볼릭 링크 등을 의미하고, rg는 파일 MIME 타입을 의미함
    • fd에는 --extension 플래그가 있지만 rg에는 없음
    • 두 도구의 사용이 높은 상관관계를 가지므로 유사한 이름의 플래그가 유익할 것임
  • 새로운 Rust 도구를 사용하지 않는 이유는 원래 도구의 옵션을 기억하기 어려워서임
    • ripgrep을 VS Code에서 사용하지만 명령줄에서는 grep을 사용함
    • 도구가 작동하기만 하면 어떤 언어로 작성되었는지는 상관없음
    • GNU Stow는 Perl로 작성되었지만 좋아하는 Unix 도구 중 하나임
    • Rust 도구가 드롭인 대체품이라도 수동으로 설치하지 않을 것임
    • 사용자로서 속도 개선과 메모리 안전성은 중요하지 않음
    • Go 같은 다른 언어도 메모리 안전성을 보장하며, 커뮤니티 참여도 높음
    • Rust가 구세주라는 서사에 완전히 설득되지 않음
    • macOS나 Ubuntu가 Rust 대체품으로 교체해도 워크플로우에 지장이 없다면 불만 없음
  • Terminal Trove를 가끔씩 확인해야 함
    • 자주 사용하는 도구의 쉬운 대체품을 찾을 수 있음
    • find는 fd로, time은 hyperfine으로, grep은 ripgrep으로 대체 가능
    • asciinema를 .gif로 변환하는 t-rec, 수동으로 커밋 생성하는 koji 등
  • fd를 사용해볼 예정임. find의 인수 사용법을 기억하기 어려워서 find . | grep what_i_am_looking_for를 주로 사용함
    • xargs와 통합된 동작이 마음에 듦
    • fd가 symlink 디렉토리 탐색을 어떻게 처리하는지 찾지 못했음
  • 매일 fd를 많이 사용하며 새 기기에 기본 설치함
    • find를 오랫동안 사용했지만 편리한 사용성은 아님
    • 최근 대체 유틸리티 트렌드에 100% 동의함
    • 원래의 유연성을 모두 유지하지 않을 수도 있지만 일반적인 경우에 사용하기 훨씬 쉬움
  • 기본적으로 많은 폴더를 무시하는 것이 불편함
    • 시스템 어디에 있는지 알고 싶을 때 find를 사용함
    • fd에 무시하지 않는 옵션이 있지만 기억하지 못해 find로 돌아감
  • 새로운 Rust CLI 도구를 좋아하지만 fd는 tar와 ln처럼 사용법을 기억하기 어려움
    • 누구의 잘못도 아님
    • 항상 매뉴얼을 다시 읽어야 함
    • GNU find의 특이점에도 불구하고 더 잘 기억됨