본문 바로가기
Linux/CentOS

리눅스에서 파일 위치 찾기

by ahfmrjttb 2021. 12. 8.

일을 하다보면 파일이 어딨는지 잊어버려 찾아야 하거나 많은 파일 중에 내가 필요한 문자열이 있는 파일을 찾아야하는 경우가 있다. 이번 포스팅에서는 파일 위치를 찾는 방법에 대해 알아보고자 한다.

 

P.S : 파일 내 문자열 찾기도 이번 포스팅에 포함시키려고 했으나 생각보다 내용이 길어져서 나누어서 포스팅합니다.

 

[ 사용법 ]

$ find [찾고자 하는 위치] -name [찾고자 하는 파일명] (2>/dev/null)

 

find의 사용법은 위와 같지만, 이번 포스팅에서는 다양한 상황을 가정해본다.

 

1. 파일명을 모두 알고 있는 경우

현재 필자의 directory이다. Directory에는 여러 directory 및 파일들이 존재하는데, 여기서 필자는 pooh.txt 파일을 찾고 싶다. 그러면 find 명령어를 써주면 된다.

 

$ find /home/pooh -name pooh.txt

find 명령어는 [찾고자 하는 위치]의 하위 directory까지 모두 찾는다. 필자의 명령어를 보면, /home/pooh 디렉토리부터 /home/pooh의 모든 하위 디렉토리까지해서 pooh.txt라는 파일을 찾는다는 의미이다. 만약 어딨는지를 몰라서 최상위 directory부터 찾으려고 하면 [찾고자 하는 위치]에 '/'를 넣어주면 된다. 

 

그 결과 pooh.txt 파일은 "/home/pooh/jupyter_volume/test" directory에 있었다. 그런데, 위에 Permission denied 에러 때문에 보기가 지저분하다. find 명령어를 사용하다보면, 필자처럼 에러가 출력되는 경우가 많을 것이다. 이는 2>/dev/null를 통해 에러 메시지가 출력되지 않도록 처리할 수 있다. 필자의 경우 find 명령어를 사용할 때 2>/dev/null을 거의 붙인다.

 

 

$ find /home/pooh -name pooh.txt 2>/dev/null

2>/dev/null을 붙여주니까 에러 메시지가 출력되지 않아 깔끔하게 필자가 원하는 정보만 출력된다. 2>/dev/null에 관한 자세한 내용은 검색해서 한 번 찾아보기 바란다.

 

 

2. 파일명을 일부만 아는 경우

위에서 살펴본 내용은 내가 파일명을 완전히 알고 있는 경우이지만, 일을 하다보면 일부분만 기억할 수도 있다. 이런 경우는 와일드카드(*)를 이용하면 된다.

 

 

(1) 파일의 앞부분만 알고 있는 경우

 

필자가 어떤 종류(확장자)의 파일인지는 모르겠으나 appl~로 시작했던 것을 알고 있다고 가정하자. 그러면 이렇게 해주면 된다.

 

$ find /home/pooh -name 'appl*'

이렇게 하면, appl~로 시작하는 모든 파일들이 발견되는 것을 확인할 수 있다. 

 

 

(2) 파일의 뒷부분만 알고 있는 경우(feat. 확장자)

 

필자가 파일명은 뭔지 모르겠는데 파일의 뒷부분에 해당하는 확장자가 java 파일인 것만 알고 있다고 가정하자. 이 경우 (1)과 같은 원리로 해주면 된다.

 

$ find /home/pooh -name '*.java'

이렇게 파일에 .java에 해당하는 모든 파일을 찾아준다. '*.java' 대신 '*java'로 해도 똑같은 결과가 나온다. 당연한 얘기지만, 파일명의 마지막 부분이 java인 모든 파일을 찾아주기 때문이다.

 

 

(3) 파일명의 일부분만 알고 있는 경우

 

이 경우는 필자가 파일명이 'ly'가 포함되어 있던 거는 확실한데 이게 앞인지 뒤인지도 전혀 모르겠으며, 어떤 확장자인지도 모르는 경우를 말한다. 하지만, 문제 없다. 이 경우는 'ly' 앞/뒤에 모두 와일드카드를 붙여버리면 된다.

 

$ find /home/pooh -name '*ly*'

이렇게 잘 찾아준다. 근데 잘보면, 이런 의문이 들 수 있다. (1)의 경우는 (3)에 포함되는 거지 않느냐고.

맞다. 사실, 파일명이 ly로 시작하는 파일인 경우에도 '*ly*'로 넣어주면 잘 찾는다. 좀 더 명확한 이해를 위해 (1)의 경우를 그대로 가져와보겠다.

 

$ find /home/pooh -name '*appl*'

(1)에서는 파일명이 appl로 시작하는 것을 알고 있었기 때문에 'appl*'로 찾았지만, 굳이 appl로 시작하는 것을 몰라도 appl가 포함되어 있다는 것만 알고 있었으면, 와일드카드를 통해 appl로 시작하는 파일까지도 모두 찾을 수 있다. 

 

그러면, '*appl'로 하면 똑같은 결과가 나올까? 당연히 안 나온다.

당연한 얘기지만, appl 뒤에 아무것도 없기 때문에 appl로 끝나는 파일만 찾게 되는데, 필자의 경우 해당하는 파일이 없으므로 아무 결과도 안 나오는 것이다. 물론 혹자의 경우 appl로 끝나는 파일이 있다면 출력은 되겠지만, 핵심은 (1)의 결과와 다른 결과가 나온다는 것이다. 

 

 

 

 

참고 사이트

    - https://overcode.tistory.com/entry/%EB%A6%AC%EB%88%85%EC%8A%A4-%ED%8C%8C%EC%9D%BC-%EC%B0%BE%EA%B8%B0-%ED%8C%8C%EC%9D%BC%EC%86%8D-%EB%AC%B8%EC%9E%90%EC%97%B4-%EC%B0%BE%EA%B8%B0

댓글