/
Linux find 를 대체하는 fd 명령어 사용법

Linux find 를 대체하는 fd 명령어 사용법


fd 는 file system 에서 특정 엔트리를 찾는 명령어로 find 보다 더 사용자 친화적이며 속도도 빠릅니다.


물론 find 보다 옵션이나 기능이 적긴 하지만 많이 사용하는 사례에 대해 합리적인 기능을 제공합니다.


fd 의 저자인 David Peter는 bathyperfine 및 다수의 오픈소스 프로젝트 저자이며 모두 Rust 로 작성되었습니다.


설치

패키지 매니저 사용

Ubuntu

sudo apt install fd-find


Windows

choco install fd

Alpine Linux

apk add fd


Source 에서 빌드

CentOS 처럼 지원되지 않는 배포판이거나 최신 버전을 사용할 경우 Rust 로 개발되었으므로 rush 개발도구와 cargo 를 설치한 후에 빌드해도 됩니다.

cargo install fd-find

사용

기본 사용

fd 는 기본적으로 찾을 패턴을 주면 smart case 방식으로 해당 패턴이 들어간 모든 파일이나 폴더를 출력합니다.

smart case 는 기본적으로 대소문자 구분을 하지 않지만 PATTERN 에 대문자가 있으면 대소문자를 구분합니다.

fd pattern

즉 위의 fd 명령은 다음 find 명령과 동일합니다.

find . -iname \*pattern\*


예로 options 라는 단어가 들어간 모든 파일을 찾으려면 다음과 같이 간단하게 사용하면 됩니다.

$ fd options

src/options.rs

대상 path 지정

fd 는 기본적으로 현재 폴더를 찾지만 find 처럼 다른 폴더를 지정해서 검색할 수 있습니다. 주의할 점은 검색 대상 PATH 를 지정할 때 앞에 . 을 하나 찍어 줘야 합니다.

다음은 /var/libs 폴더 아래에서 options 가 들어가는 모든 파일을 검색합니다.

$ fd options /var/libs  

/var/lib/letsencrypt/backups/1623826821.3591514/options-ssl-nginx.conf_4

ignore 파일도 찾기

fd 는 검색하지 않을 패턴들을 $HOME/.fdignore 파일에 등록해 두면 이 파일들은 검색시 자동으로 제외됩니다.

마찬가지로 .gitignore 에 등록된 패턴들은 찾지 않으므로 다음과 같이 ignore 에 등록되어 있다면 검색시 .class 와 .xml 이 아닌 파일만 출력합니다.

*.class
*.xml

-I, --no-ignore 옵션를 사용하면 .gitignore.fdignore 에 등록된 파일 패턴도 검색합니다.


정규식

찾을 패턴에 정규식을 사용할 수도 있습니다 .다음은 /etc 폴더에서 n 으로 시작하고 conf 로 끝나는 모든 파일 목록을 출력합니다.

$ fd /etc
$ fd '^n.*conf$' 

NetworkManager/NetworkManager.conf
X11/xinit/xinput.d/none.conf
authselect/nsswitch.conf
dbus-1/system.d/net.hadess.SensorProxy.conf

정규식은 Rust 의 문법을 따릅니다. (링크)


확장자(extension)로 찾기

-e 옵션으로 특정 확장자를 갖는 모든 파일을 검색할 수 있습니다. 다음은 /usr/lib64 폴더내의 .so 로 끝나는 모든 파일 목록을 출력합니다.

$ fd /usr/lib64
$ fd -e so

...
libutil-2.32.so
libmultipath.so
libBrokenLocale-2.32.so

glob 패턴 사용

-g, --glob 옵션을 사용하면 경로에서 패턴과 일치하는 파일을 알수 있습니다. 다음은 /usr/lib64 에서 libc*.so 파일을 출력합니다.

$ fd -g 'libc-*.so' /usr/lib64/


/usr/lib64/libc-2.32.so

size 로 찾기

-S, --size 를 사용하면 크기를 지정해서 검색할 수 있습니다.  > 는 (plus) 기호를 < 는 (minus) 기호를 사용해서 이상과 미만을 표시할 수 있습니다.

다음은 /usr/lib64 에서 크기가 1M 보다 크고 확장자가 .so 인 파일의 상세 정보를 출력합니다.

$ fd . -S +1m -e so  /usr/lib64/  -l

-rwxr-xr-x. 1 root root  14M Mar 27 01:11 /usr/lib64/dri/i965_dri.so
-rwxr-xr-x. 8 root root  22M Mar 27 01:11 /usr/lib64/dri/iris_dri.so
-rwxr-xr-x. 8 root root  22M Mar 27 01:11 /usr/lib64/dri/kms_swrast_dri.so
...


변경 시간으로 찾기

--change-newer-than DURATION 을 사용하면 변경일이 특정일 이후인 파일을 찾을 수 있습니다. DURATION에는 1weeks 나 3months 같이 적어주면 되며 다음은 현재일 기준 변경일이 7일 이후에 변경된 파일을 검색합니다. 

$ fd  --change-newer-than 7days -l

또는 특정 시간을 지정해서 변경일이 그 이후인 파일만 검색할수도 있습니다. 다음은 /tmp 에서  지정한 시간 이후에 변경된 파일을 검색합니다.

$ fd . --change-newer-than '2021-08-23 10:00:00' -l /tmp


반대로 변경일이 특정일 이전인 파일을 찾을 경우 --change-older-than DURATION 을 사용하면 됩니다.  다음은 현재일 기준 변경일이 7일 이전인 파일들을 검색합니다.

$ fd  --change-older-than 7days -l


2가지 옵션을 같이 쓰면 BETWEEN 처럼 사용할 수 있습니다. 다음은 /tmp 아래에서 변경일이 특정 기간인 파일들을 검색합니다.

$ fd . --change-newer-than '2021-08-24 04:30:00'  --change-older-than  '2021-08-25 00:00:00' -l /tmp


같이 보기

Ref

Related content

여러 조건으로 파일을 찾는 Linux find 명령어 사용법
여러 조건으로 파일을 찾는 Linux find 명령어 사용법
More like this
linux df 명령어 사용법
linux df 명령어 사용법
More like this
ack-grep 을 대체할 수 있는 빠른 코드 검색 도구 ag(silver searcher)
ack-grep 을 대체할 수 있는 빠른 코드 검색 도구 ag(silver searcher)
More like this
xmodmap 으로 Linux 한글/영어 전환키 설정
xmodmap 으로 Linux 한글/영어 전환키 설정
More like this
공유 라이브러리 의존성(shared library dependencies)을 출력하는 linux ldd 사용법
공유 라이브러리 의존성(shared library dependencies)을 출력하는 linux ldd 사용법
More like this
파일 시스템과 마운트 정보를 보여주는 findmnt 명령어
파일 시스템과 마운트 정보를 보여주는 findmnt 명령어
More like this