Linux에서 fd 명령을 사용하는 방법
리눅스 환경에서 fd 명령은 파일 검색을 위한 find 명령의 강력하고 간편한 대안으로 떠오르고 있습니다. 직관적인 구문, 편리한 기본 설정, 그리고 사용자 친화적인 작동 방식이 특징입니다. 이제 fd의 매력을 알아보겠습니다.
fd와 find: 어떤 차이가 있을까요?
fd 명령은 기존의 find 명령을 완전히 대체하기 위해 만들어진 것은 아닙니다. find는 리눅스 시스템에서 오랫동안 사용되어 온 필수 유틸리티입니다. fd는 find의 일반적인 사용 사례들을 보다 간단하고 효율적으로 처리하고자 합니다. 특히, fd는 find보다 8~9배 빠른 속도를 자랑합니다. 이 점은 GitHub 저장소에서 확인할 수 있는 프로젝트 벤치마크 자료를 통해 입증되었습니다.
fd는 ls 명령과 유사하게 색상이 입혀진 출력 형식을 제공합니다. 재귀적으로 하위 디렉토리를 검색하지만, 기본적으로 숨겨진 디렉토리는 검색하지 않습니다. fd는 Git 시스템을 인지하고 있어, ".gitignore" 파일에 정의된 패턴을 자동으로 무시합니다.
또한 fd는 기본적으로 대소문자를 구분하지 않고 검색을 수행하지만, 검색 패턴에 대문자가 포함된 경우 자동으로 대소문자를 구분하여 검색합니다. 이러한 기능은 사용자 편의성을 높여줍니다. 물론 이러한 기본 설정을 필요에 따라 변경할 수도 있습니다.
fd 설치 방법
Ubuntu 19.04(Disco Dingo) 버전부터는 apt-get 명령을 사용하여 fd를 간편하게 설치할 수 있습니다. 이전 버전의 Ubuntu를 사용하고 있다면, GitHub 저장소의 설치 안내를 참고하시기 바랍니다.
설치 명령어는 다음과 같습니다:
sudo apt-get install fd-find

Ubuntu에서는 다른 유틸리티와의 이름 충돌을 방지하기 위해 명령어가 fdfind로 지정되어 있습니다. fd 명령어를 사용하고 싶다면, 다음과 같이 별칭을 설정할 수 있습니다.
alias fd=fdfind

설정한 별칭을 영구적으로 사용하려면 ".bashrc" 또는 ".bash_aliases" 파일에 해당 설정을 추가해야 합니다.
Fedora에서는 다음 명령어를 사용하여 fd를 설치할 수 있습니다.
sudo dfn install fd-find

Manjaro에서는 다음 명령어를 사용하세요:
sudo pacman -Syu fd

fd와 fdfind의 관계
혼란을 피하기 위해 Ubuntu 테스트 환경에서는 기본 명령어 이름인 fdfind를 그대로 사용했습니다. fd와 fdfind는 실질적으로 동일한 명령어입니다. 아래 예시에서 볼 수 있듯이 fdfind의 버전을 확인하면 출력에 "fd"라고 표시됩니다.
fdfind --version

본문에서는 명령어를 'fdfind'라고 지칭하지만, 다른 리눅스 배포판에서는 'fd'를 입력하여 키 입력을 줄일 수 있습니다.
fd를 이용한 기본 검색
명령어 옵션 없이 fd를 실행하면, ls 명령어와 유사하게 현재 디렉토리의 파일들을 나열합니다. 단, fd는 기본적으로 하위 디렉토리까지 재귀적으로 탐색합니다.
명령어는 다음과 같습니다:
fdfind

출력은 파일 유형과 디렉토리에 따라 다른 색상으로 표시됩니다.

특정 유형의 파일을 검색하려면 "-e" (확장자) 옵션을 사용하면 됩니다. 이 때 확장자 앞에 마침표(.)를 붙일 필요가 없으며, 대소문자도 구분하지 않습니다.
예를 들어, 다음 명령어를 입력하면:
fdfind -e png

PNG 이미지 파일만 출력됩니다.

특정 파일 이름을 검색하려면, 명령어에 파일 이름을 직접 입력하면 됩니다.
fdfind index.page

위 예시에서, 파일은 하위 디렉토리에 위치해 있습니다. fd는 기본적으로 재귀 검색을 수행하므로 별도의 명령 없이도 파일을 찾을 수 있습니다.
특정 디렉토리에서 검색을 시작하려면, 명령어에 해당 디렉토리 경로를 포함시키면 됩니다. 다음 명령어는 "/etc" 디렉토리에서 "passwd"라는 이름이 포함된 파일을 검색합니다.
fdfind passwd /etc

다음 예시는 파일 이름에 "coord"가 포함된 모든 C 소스 코드 파일을 검색합니다.
fdfind -e c coord

위 예시에서, 두 개의 일치하는 파일이 발견되었습니다.
fd와 Git의 협력
Git은 널리 사용되는 소스 코드 버전 관리 시스템입니다. Git을 사용하는 프로젝트에서는 ".gitignore" 파일을 통해 Git이 추적해야 할 파일과 무시해야 할 파일을 정의합니다. 기본적으로 fd는 이 ".gitignore" 파일에 설정된 규칙을 따릅니다.
만약 현재 디렉토리에 Git 저장소와 ".gitignore" 파일이 존재한다면, 다음 명령어로 확인해볼 수 있습니다.
ls -adl .git*

이제 fd에게 파일 이름에 "coord"가 포함된 파일을 찾도록 요청합니다. 다음으로 "-I" (무시하지 않음) 옵션을 사용하여 검색을 다시 실행합니다. 이 옵션은 fd가 ".gitignore" 파일의 설정을 무시하고 모든 일치하는 파일을 출력하도록 합니다.
다음 명령어를 실행해 봅시다.
fdfind coord
fdfind coord -I

두 번째 결과 집합에는 두 개의 추가 파일이 포함되어 있으며, 이 파일들은 오브젝트 파일입니다. 오브젝트 파일은 소스 코드가 컴파일될 때 생성되며, 링커를 통해 최종 실행 파일이 만들어집니다.
일반적으로 오브젝트 파일은 소스 코드 버전 관리 시스템에서 무시됩니다. 오브젝트 파일은 컴파일 과정에서 항상 새로 생성되므로 저장할 필요가 없기 때문입니다. ".gitignore" 파일은 Git에게 이러한 오브젝트 파일을 무시하도록 지시하며, fd 역시 기본적으로 이러한 설정을 따릅니다.
"-I" (무시하지 않음) 옵션을 사용하면 fd는 ".gitignore" 파일의 영향을 받지 않고 모든 파일을 검색합니다.
파일 형식 및 대소문자 구분
fd는 디렉토리, 파일(실행 파일, 빈 파일 포함), 심볼릭 링크 등 다양한 파일 유형을 검색할 수 있습니다. 검색할 파일 형식을 지정하려면 "-t" (유형) 옵션과 함께 다음 문자 중 하나를 사용하면 됩니다.
- f: 파일
- d: 디렉토리
- l: 심볼릭 링크
- x: 실행 파일
- e: 빈 파일
다음은 "images"라는 이름의 디렉토리를 찾는 예시입니다.
fdfind -td images

검색 결과, 현재 디렉토리의 하위 디렉토리에서 일치하는 항목이 발견되었습니다.
이제 대소문자 구분이 검색 패턴에 어떻게 영향을 미치는지 살펴보겠습니다. 먼저 파일 이름에 "geo"가 포함된 파일을 검색한 다음, "Geo"가 포함된 파일을 검색해 봅니다.
fdfind -tf geo
fdfind -tf Geo

첫 번째 명령어에서 소문자 검색 패턴을 사용했기 때문에, fd는 대소문자를 구분하지 않고 검색합니다. 따라서 "geo"와 "Geo" 모두 유효한 일치 항목으로 간주됩니다.
두 번째 명령어에서는 검색 패턴에 대문자가 포함되어 있으므로, fd는 대소문자를 구분하여 검색합니다. 따라서 "Geo"만이 유효한 일치 항목으로 간주됩니다.
명령 실행
fd 명령은 검색된 각 파일에 대해 다른 명령을 실행할 수 있는 기능을 제공합니다.
예를 들어, 소스 코드 디렉토리 어딘가에 ZIP 파일이 있다고 가정해 봅시다. 다음과 같은 명령어로 ZIP 확장자를 가진 파일을 검색할 수 있습니다.
fdfinf -e zip

"-x" (exec) 옵션을 사용하면, 검색된 각 파일을 다른 명령에 인자로 전달하여 처리할 수 있습니다. 예를 들어, 다음 명령어를 실행하면 unzip 유틸리티를 사용하여 ZIP 파일의 압축을 풀 수 있습니다("{"}"는 검색된 파일을 나타내는 자리 표시자입니다).
fdfind -e zip -x unzip {}
위 명령어는 현재 작업 디렉토리에 파일 압축을 풉니다. ZIP 파일이 있는 디렉토리에 압축을 풀려면 다음 자리 표시자 중 하나를 사용할 수 있습니다.
- {}: 찾은 파일의 전체 경로 및 이름
- {/}: 찾은 파일의 파일 이름
- {//} : 찾은 파일이 포함된 디렉토리
- {/.}: 찾은 파일의 파일 이름 (확장자 제외)
ZIP 파일이 위치한 디렉토리에 압축을 풀려면, "unzip -d" (디렉토리) 옵션을 사용하고 상위 디렉토리 자리 표시자({//})를 전달할 수 있습니다.
fdfind -e zip -x unzip {} -d {//}

위 명령어는 ZIP 파일을 찾은 다음 해당 파일이 위치한 디렉토리에 압축을 풉니다.

fd가 당신의 새로운 검색 도구가 될 수 있을까요?
fd는 간단한 사용법으로 가장 일반적인 검색 요구 사항을 충족시켜 줍니다. 따라서 기존의 find 명령어를 대체하는 훌륭한 도구가 될 수 있습니다. 더 고급 기능이 필요할 때는 언제든지 숙련된 find 명령으로 돌아갈 수 있습니다.