find가 모든 파일을 나열할 수 없습니다.

find가 모든 파일을 나열할 수 없습니다.

usr경로에 "x86_64-linux-gnu" 키워드가 포함된 모든 파일을 나열하려고 합니다 . 예를 들어, /usr/bin/x86_64-linux-gnu-gcc-ranlib-5.

먼저 다음과 같은 명령을 실행합니다.

find /usr -name "*x86_64-linux-gnu*" | wc -l

출력은 232입니다. 옳지 않다는 걸 느낄 수 있었어요.

그런 다음 다른 명령을 실행합니다.

find /usr -name "*" | grep x86_64-linux-gnu | wc -l

출력은 3700이며 이는 정확합니다.

첫 번째 명령이 예상대로 작동하지 않는 이유는 무엇입니까?

답변1

아래에 있는 모든 파일을 찾고 있다면포함되어 있으므로 대신 x86-64-linux-gnu사용해야 합니다 .-path-name

find /usr -path "*x86_64-linux-gnu*" | wc -l

-name-path전체 경로가 아닌 기본 파일 이름만 일치합니다 ( find명령줄에 제공된 초기 경로 중 하나에서 시작하도록 구성됨). 첫 번째 명령의 출력을 살펴보면 다음과 같습니다.

find /usr -name "*x86_64-linux-gnu*" | less

, , x86_64-linux-gnu와 같이 자체적으로 일치하는 파일 및 디렉터리가 표시되지만 해당 변형이나 위의 변형 과 일치하는 파일 및 디렉터리는 표시되지 않습니다 ./usr/include/x86_64-linux-gnu/usr/lib/ccache/x86_64-linux-gnu-g++/usr/lib/python3.5/lib-dynload/_bz2.cpython-35m-x86_64-linux-gnu.so/usr/include/x86_64-linux-gnu/curlgrep-path

이 두 가지 표현과 적절한 사용법은 다음과 같습니다.find(1)맨페이지(언제나 그렇듯이 man find먼저 자신의 시스템을 확인하십시오.)

답변2

에서 man find:

   -name pattern
          Base of file name (the path with the leading directories removed) matches
          shell pattern pattern.

첫 번째 형식( -name "*x86_64-linux-gnu*")은 해당 파일의 형식에서만 작동합니다.이름성냥 pattern. 이름이 패턴과 일치하는 디렉터리에 있으면 일치하지 않습니다. 그러나 후자 형식( -name "*"with grep)은 이와 일치합니다.

관련 정보