일을 하다보면 파일이 어딨는지 잊어버려 찾아야 하거나 많은 파일 중에 내가 필요한 문자열이 있는 파일을 찾아야하는 경우가 있다. 이번 포스팅에서는 파일 위치를 찾는 방법에 대해 알아보고자 한다.
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)의 결과와 다른 결과가 나온다는 것이다.
참고 사이트
'Linux > CentOS' 카테고리의 다른 글
[방화벽 에러] Failed to restart firewalld.service: Unit is masked (0) | 2020.07.21 |
---|
댓글