find -n dir 파일 대신 dir -name 파일을 찾는 이유는 무엇입니까?

find -n dir 파일 대신 dir -name 파일을 찾는 이유는 무엇입니까?

나는 이것을 둘러 보았지만 그것에 대해 아무것도 찾을 수 없습니다.

나는 항상 궁금했습니다. 대부분의 다른 내장 bash 명령이 -flag arg1 arg2 명령 형식(예: cp -r dir1/dir2/)을 갖는 이유는 무엇입니까? 그러나 여기서 find 명령은 어떻게든 두 인수 사이의 중간에 플래그를 넣습니다. ?

find path/ -name pattern

이것은 나에게 일관성이 없으며 기억하기 어렵습니다. 타당한 이유가 있나요? 내가 모르는 어떤 컨벤션이 있나요?

답변1

명령이 먼저 나오고 일관성은 나중에 추가됩니다.

가장 먼저 찾을 수 있는 맨페이지는 다음과 같습니다.

find 경로명 표현식

find1970년대부터 순서 및 구문(옵션에 대시가 필요한지 여부)에 대한 가정이 다양한 명령에 추가되었습니다.~ 후에(예: 1980년대 후반 및 1990년대 초반) 사용자가 다양한 명령의 구문을 기억하는 데 도움이 됩니다. 예를 들어, 의 경우 find개발자는 몇 가지 불일치를 인식하게 되었습니다.

실수
장치 유형을 확인할 수 없습니다.
구문은 다음과 동일해야 합니다.만약에.

따라서 정답은 명령이 원래 개발자에게 의미가 있었고 주요 변경 사항이 적용되지 않았다는 것입니다.

답변2

몇 가지 사항을 혼동하신 것 같습니다. Shell 도 내장 함수가 find아닙니다 . cp명령의 유일한 매개변수 find는 경로이고 나머지는 옵션과 해당 값이지만 이는 단지 의미일 뿐이며 여기서는 차이점이 그다지 중요하지 않습니다. 더 중요한 것은 옵션 플래그에는 두 가지 범주가 있다는 것입니다. 주장을 받아들이는 자와 받아들이지 않는 자. 가장 일반적인 형식은 다음과 같습니다.

command -flag flagValue

많은 프로그램이 단일 문자 플래그( command -f)를 사용하지만 많은 프로그램은 단일 문자와 긴 옵션을 모두 사용합니다(예: 거의 모든 GNU 도구). cp이것이 유효한 명령 이라고 언급하셨습니다 cp.

cp -dR --preserve=all -i --dereference foo bar baz/

일반적으로 가장 일반적인 "표준" 형식은 실제로 다음과 같습니다.

command -flag1 -flag2 value1 -flag3 value2 ARGUMENTS

즉, 많은 플래그는 단순한 부울 값이 아니지만 값을 가질 수도 있습니다. 찾기도 예외는 아닙니다. cp인용한 플래그 의 경우 에도 마찬가지입니다.

cp -t /foo -u file1 file2 fileN

따라서 대부분의 명령은 제대로 구성되지 않았 command -flag arg1 arg2으며 실제로는 정반대입니다. 그것은 단지 사용된 플래그에 달려 있습니다. 개발자가 왜 이 특정 형식을 선택했는지 에 대해서는 find개발자에게 물어봐야 할 것 같습니다.

답변3

findcpio대부분의 원래 Unix 유틸리티 작성자가 아닌 Dick Haight가 만들었습니다 . 당시에는 라이브러리로 연결될 수 있는 명령줄 인수 구문 분석 라이브러리가 없었기 때문에 일관성을 강제/인센티브화할 수 있었습니다(80년대 중반에는 getopt여러 시스템에 소스 코드가 있었습니다).

사람들이 스크립트에서 명령과 해당 인수를 사용하면 기존 함수의 구문을 변경하기가 어렵습니다.

답변4

find옵션에 의해 제어되는 단순한 명령이 아닌, 자체 제어 언어를 구현한 명령입니다.

CLI는 find다음과 같습니다:

find [options] path1..pathn [expression]

-H여기서 , -L및 같은 옵션이 사용 -P됩니다 .expressionfind control language

: 와 같은 인수 는 기본 연산자이고 완전한 표현식은 와 같은 필터 및 연산에 대한 수학적 설명 으로 생각할 수 있기 때문에 -name호출됩니다 .primaries-print-exec

find command language매우 강력하지만 여전히 배우기 쉬운 언어입니다 . 디렉토리 트리를 탐색하고 전통적인 UNIX 명령줄 옵션만을 사용하여 동작을 달성하려는 프로그램은 일반적으로 약하거나 배우기 어렵습니다. 예를 들어 GNU tarvs. star(후자는 find command language.

관련 정보