리눅스 파일 디렉터리 찾는 방법

2021. 2. 13. 08:01 컴퓨터/우분투·리눅스

리눅스 파일과 디렉터리 찾는 방법

리눅스에서 파일과 디렉터리를 찾으려면 find 명령을 사용합니다. -exec 옵션으로 grep를 이용하면 디렉터리 내에 있는 모든 파일 중 특정 문장이 있는 파일만 찾을 수도 있습니다. find 명령의 기본 사용 방법은 아래와 같습니다.

find [찾는 위치] -name [파일이름]

예를 들어 $ find . -name main.c 를 실행하면 현재 위치에서 서브 디렉터리까지 main.c를 찾아서 디렉터리 위치를 표시해 줍니다.

$ find . -name main.c
./mingw_rs232/main.c
./mingw_tcp_server/main.c
./can_to_udp/main.c
./can_to_uart/main.c
./get_curmsec/main.c
./mingw_tstrlist/main.c
./get_systick_count/main.c
./mingw_udp_client/main.c
./fanet_can_loop/main.c
./sample_gxlib/01_gx_open/main.c
./sample_gxlib/06_save_png/main.c
./sample_gxlib/02_gx_get_screen_dc/main.c
./sample_gxlib/50_multi_frame/main.c
$

리눅스에서 특정 문자열이 있는 파일 모두 찾기

만일 서브 디렉터리 안에 있는 모든 C 소스 파일 중에 main() 함수 위치를 아래와 같이 찾을 수 있습니다.

find  . -name *.c -exec grep "main(" /dev/null {} \;

위 명령을 분석하면 아래와 같습니다.

  • . find 명령을 현재 디렉터리를 시작으로 서브 디렉터리까지 모두 검색합니다.
  • -name *.c 파일 이름 중 *.c를 찾으며
  • -exec grep 찾은 파일을 대상으로 grep 명령으로 파일 내용을 검색합니다.
  • "main(" 검색할 단어입니다.
  • /dev/null grep가 검색하는 과정을 제거합니다.
  • {} 찾은 파일 이름을 대치합니다.
  • \; grep는 grep 다음 문자부터 ; 문자 사이까지를 실행합니다. ; 문자는 특수문자여서 앞에 \를 붙였습니다.
$ find . -name *.c -exec grep "main(" /dev/null {} \;
./fanet_can_sample/can_receiver/main_can_receiver.c:int main(int argc, char **argv) {
./fanet_can_sample/can_sender/main_can_sender.c:int main(int argc, char **argv) {
./sample_tmmap/sample.c:int     main( int argc, char **argv )
./can_to_udp/main.c:int main(int argc, char **argv) {
./sample_ix_key/sample.c:int main( int argc, char **argv )
./gxlib_gallery/main.c:@brief  main()
./app_logger_test/main.c:int main(int argc, char **argv)
./sample_fanet_udp_echo/udp_client.c:int main(int argc, char **argv) {
./sample_fanet_udp_echo/udp_server.c:int main(int argc, char **argv) {
./sample_rspackage/sample.c:int main( void)
./fanet_can_loop/main.c:int main(int argc, char **argv) {
./sample_tcp_server/sample.c:int        main( int argc, char **argv )
./sample_gxlib/sample_정리/main.c:int   main( void)
./sample_gxlib/03_get_set_pixel/main.c:int main(void)
./sample_gxlib/11_copy_screen/main.c:int   main( int argc, char *argv[])
./sample_gxlib/sample_gxlib/sample.c:int   main( void)
./can_pslink_emulator/main_can_sender.c:int main(int argc, char **argv) {
$

▲ 실행 결과입니다.

$ find . -name *.c -exec grep "main("  {} \;
int main(int argc, char **argv) {
int main(int argc, char **argv) {
int     main( int argc, char **argv )
int  main( int argc, char **argv )
int main(  int argc, char **argv )
int main(int argc, char **argv) {
int main( int argc, char **argv )
@brief  main()
int main( int argc , char **argv )
int   main( void)
int     main( int argc, char **argv )
int main(int argc, char **argv)
int main(int argc, char **argv) {
int main(int argc, char **argv) {
$

▲ 명령 행에서 /dev/null을 빼고 실행하면 grep로 파일 내에서 문장을 검색하는 결과가 출력됩니다.

이 댓글을 비밀 댓글로

티스토리 로그인이 풀리면 여기를 클릭하세요.

  1. 유용한 정보 잘보고 가요 오늘도 좋은하루 보내세요~^^
    • 블린디
    • 2021.03.25 12:21
    이렇게 오랫동안 블로그를 운영할 수 있다니 신기합니다. 저는 이제 시작해보려고 해요.감사합니다.
error: Content is protected !!