나는 다음과 같은 두 가지 명령을 내렸다
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: 모든 디렉터리와 일치
표현식이 동일하지 않으므로 결과가 다릅니다.