Linux에서 "find . -name '*.c' -or -name '*.cpp'"의 정확한 명령을 알고 싶습니다.

Linux에서 "find . -name '*.c' -or -name '*.cpp'"의 정확한 명령을 알고 싶습니다.

요즘 리눅스에서 쉘을 배우고 있습니다. 질문이 있습니다.

다음 명령을 참조하십시오:

$ find . -name '*.c' -or -name '*.cpp'

위 명령은 다음 명령과 같이 내부적으로 처리되나요?

$ find . -name '*.c' -and -print -or -name '*.cpp' -and -print

답변1

man find설명하다:

   If the whole expression contains no actions other than -prune or -print,
   -print is performed on all files for which the whole expression is true.

그렇습니다. 동일하지만 다음과 같이 생각하는 것이 더 쉬울 것입니다.

find . \( -name '*.c' -or -name '*.cpp' \) -and -print

또는 더 간단하고 POSIX를 준수합니다.

find . \( -name '*.c' -o -name '*.cpp' \) -print

답변2

기본적으로 이 두 명령은 동일한 의미를 가지며 동일한 출력을 표시합니다. 더 짧은 경로가 있는데 왜 더 오래 걸리나요?

답변3

OR 및 AND 연산자는 부울 논리를 따릅니다.

프리미티브 A = -name '*.c', B = -name '*.cpp', C = 에 대해 -print다음 방정식이 있습니다.

첫 번째 예: (A+B).C

두 번째 예: (AC)+(BC)

그들은 단순한 수학적 동등성을 가지고 있습니다. 즉, 그들은 동일합니다. 그러나 첫 번째 것은 더 짧고 간결합니다.

관련 정보