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/curl
grep
-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
)은 이와 일치합니다.