find 명령은 다른 결과를 표시합니다

find 명령은 다른 결과를 표시합니다

나는 다음과 같은 두 가지 명령을 내렸다

find / -name "*.txt" -or -type f -print |wc -l

출력: 1270

find / -name "*.txt" -or -type d -print |wc -l

출력: 1305

왜 그럴까요? OR 연산자를 사용하고 있으므로 출력은 동일해야 합니다.

그런데 첫 번째 조건이 참이면 다음 조건으로 넘어가지 않잖아요? 따라서 이 경우 두 명령의 첫 번째 조건이 동일하고 true이기 때문에 두 결과는 모두 동일합니다.

답변1

아니요. 출력이 동일하면 안 됩니다.

-type f(문서)와 함께

-type d(목차)

그래서 카운트가 달라집니다. OR 연산자는 이를 변경하지 않습니다.

첫 번째 명령은 모든 파일(.txt 파일 또는 모든 파일)을 보고하고, 두 번째 명령은 모든 텍스트 파일과 모든 디렉터리를 보고합니다. 물론 이 숫자는 다양할 것입니다.

아마도 당신이 원하는 것은

$ find / -type f -name '*.txt' | wc -l

참고: 파일 이름에 개행 문자가 있으면 실패합니다.

파일 이름에 줄 바꿈이 있으면 시도해 보십시오...

$ find . -type f -name "*.txt" -printf '.' | wc -c

줄 대신 각 파일 이름의 첫 문자만 인쇄하고 문자 수를 계산합니다. (바라보다https://stackoverflow.com/a/15663760)

답변2

de OR 연산자를 사용하므로 두 번째 표현식의 결과를 첫 번째 표현식의 결과에 추가합니다.

  • -type f: 모든 파일과 일치
  • -type d: 모든 디렉터리와 일치

표현식이 동일하지 않으므로 결과가 다릅니다.

관련 정보