특정 디렉토리에서 파일이나 폴더를 검색하고 보여줄 수 있는 find 명령어를 사용해보자
환경
- Linux 기반 시스템
- Bash shell(/bin/bash)
find란?
find
find
: 디렉토리 계층에 있는 파일들과 폴더들을 나열해줍니다.- 하단 예시 참조
# Basic Usage
$ find [-H] [-L] [-P] [-D debugopts] [-Olevel] [starting-point...] [expression]
# Example1
$ find .
.
./test2.txt
./test_in
./test_in/another_test.txt
./pid_test_shell.sh
./test.txt
./tools
# Example2
$ find ./ -name "*.txt"
./test2.txt
./test_in/another_test.txt
./test.txt
# Example3
# -L option follow symbolic link
$ find -L ./ -name "*.sh"
./pid_test_shell.sh
./tools/upgrade_packages.sh
./tools/run_jupyter_notebook.sh
./tools/install_packages.sh
예시
grep을 이용해 원하는 파일 찾기
- Pipe와 grep 명령어를 이용
find path | grep file_name
$ find . | grep test.txt
./anaconda3/pkgs/pylint-1.7.4-py36hb9d4533_0/lib/python3.6/site-packages/pylint/test/functional/using_constant_test.txt
./anaconda3/lib/python3.6/site-packages/pylint/test/functional/using_constant_test.txt
./test/test_in/another_test.txt
./test/test.txt
./.pyenv/versions/3.5.3/lib/python3.5/test/test_doctest.txt
./.pyenv/versions/3.5.2/lib/python3.5/test/test_doctest.txt
./.pyenv/versions/3.6.1/lib/python3.6/test/test_doctest.txt
파일명을 이용해 파일 찾기
- 명령어와 함께
-name
을 이용 find path -name file_name
$find . -name test.txt
./test/test.txt
symbolic를 따라가서 탐색하기
- 명령어와 함께
-L
옵션을 이용
$ ls -l
total 16
-rwxrwxr-x 1 twpower twpower 119 May 6 18:36 pid_test_shell.sh
-rw-rw-r-- 1 twpower twpower 8 May 6 18:30 test2.txt
drwxrwxr-x 2 twpower twpower 4096 May 26 23:31 test_in
-rw-rw-r-- 1 twpower twpower 84 May 6 18:31 test.txt
lrwxrwxrwx 1 twpower twpower 20 May 26 14:53 tools -> /home/twpower/tools/
$ find ./ -name "*.sh"
./pid_test_shell.sh
$ find -L ./ -name "*.sh"
./pid_test_shell.sh
./tools/upgrade_packages.sh
./tools/run_jupyter_notebook.sh
./tools/install_packages.sh
xargs를 이용해 파일의 내용 검색하기
- 다음처럼 find, pipe, xargs 그리고 grep 명령어를 이용합니다.
find . -name "*.txt" | xargs grep "He"
$ find . -name "*.txt" | xargs grep "He"
./test2.txt:Hello
./test2.txt:Hellot
./test2.txt:tHello