![-regex를 사용하여 파일을 검색할 때 find를 사용하여 파일 경로를 지정하는 방법](https://linux55.com/image/40193/-regex%EB%A5%BC%20%EC%82%AC%EC%9A%A9%ED%95%98%EC%97%AC%20%ED%8C%8C%EC%9D%BC%EC%9D%84%20%EA%B2%80%EC%83%89%ED%95%A0%20%EB%95%8C%20find%EB%A5%BC%20%EC%82%AC%EC%9A%A9%ED%95%98%EC%97%AC%20%ED%8C%8C%EC%9D%BC%20%EA%B2%BD%EB%A1%9C%EB%A5%BC%20%EC%A7%80%EC%A0%95%ED%95%98%EB%8A%94%20%EB%B0%A9%EB%B2%95.png)
find
정규식을 사용하여 디렉토리의 특정 파일을 검색하고 싶습니다.
만약 내가한다면
cd dir
find -E . -type f -regex '^\..*[^~]'
정규식과 일치하는 디렉터리의 파일 목록을 얻습니다.
하지만 만약 내가 그렇게 한다면
find -E ~/dir -type f -regex '^\..*[^~]'
즉
find -E /home/adam/dir -type f -regex '^\..*[^~]'
나는 어떤 결과도 얻지 못한다. find
정규식을 사용할 때 검색할 디렉터리를 어떻게 지정합니까?
find
이것은 Mac에서와 마찬가지로 BSD입니다 .
답변1
인수는 -regex
발견된 전체 경로와 일치해야 합니다. 유사한 명령은 find .
유사한 경로를 찾고 ./dir/subdir/somefile
, 유사한 명령은 find ~/dir
유사한 경로를 찾습니다 /home/adam/dir/subdir/somefile
. 따라서 정규식은
/home/adam
시작 부분과 일치해야 합니다.
이 명령은 find -E . -type f -regex '^\..*[^~]'
개행 문자를 포함하지 않고 로 시작하지 않는 이름을 찾습니다 ~
. .
경로가 .로 시작하므로 .로 시작하는 이름은 항상 일치합니다 ./
.
도트 파일을 찾고 있다면 디렉터리 접두어를 허용해야 합니다. 다음 명령은 이름이 다음으로 끝나지 않는 도트 파일을 표시합니다 ~
.
find -E /whatever -regex '(\n|.)*/\.[^/]*[^~]'
하지만 이를 다음과 같이 표현하면 더 간단합니다 -name
.
find /whatever -name '.*[!~]'