[Linux] find 명령어를 통해 파일 찾기

특정 디렉토리에서 파일이나 폴더를 검색하고 보여줄 수 있는 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


참고자료

[Linux] 쉘 스크립트에서 멀티프로세스(혹은 스레드) 기능 사용하기

> 백그라운드로 명령어를 실행해서 병렬적으로 실행되는 멀티 프로세스 환경을 만들어보자.## 환경- Linux 기반 시스템- Bash shell(/bin/bash)## 멀티프로세스? 병렬처리? 멀티스레드? 백그라운드 프로세스?- 여기서 진행할 방식...… Continue reading