find [duplicate]에서 -name 매개변수와 일치하는 값과 함께 사용되는 큰따옴표

find [duplicate]에서 -name 매개변수와 일치하는 값과 함께 사용되는 큰따옴표

매개변수와 일치하는 값을 큰따옴표로 표시해야 하는 -name이유 는 무엇입니까?find

# find / -type f -name *.out |wc -l 1>mv.out                                  
0403-027 The parameter list is too long.
# cat mv.out                                                   
       0
# find / -type f -name "*.out" |wc -l 1>mv.out                                   
# cat mv.out                                                                                           
  146302

답변1

큰따옴표가 없으면 는 *.out쉘에 의해 확장됩니다. 즉, 일치하는 현재 디렉터리의 모든 파일 이름 (주로 점으로 *.out끝나거나 시작하지 않는 모든 파일 )으로 대체됩니다. .out귀하의 경우에는 매개변수로 전달되는 일치하는 파일이 두 개 이상 있는 것 같습니다 find. find이를 어떻게 해야 할지 모르고 매개변수 목록이 너무 길다고 불평합니다.

패턴을 인용하면 쉘은 패턴을 그대로 두고 따옴표만 제거하면 사용자가 의도한 대로 find하나의 변경되지 않은 매개변수가 표시됩니다 .*.out

답변2

이것이 정확히 맞는지는 잘 모르겠습니다. 그러나 나는 그것을 따옴표로 묶으면 파서가 그것을 정규식으로 읽게 된다고 믿습니다. 따옴표가 없으면 별표는 현재 디렉터리의 모든 파일을 나타냅니다.

다음 사이의 출력 차이를 확인하십시오.

$ echo $(find ./ -name *)

그리고

$ echo $(find ./ -name "*")

따라서 첫 번째 명령을 사용하면 오류가 발생할 가능성이 높습니다. 파일이 있는 경우&술집현재 디렉터리에서 별표는 파일 이름을 나타냅니다. 따라서 명령 구문 분석기는 다음과 같은 명령을 읽습니다.

$ echo $(find ./ -name foo bar)

그리고 오류 출력은 find: bar: unknown primary or operator.

두 번째 명령은 별표를 정규식으로 읽어 파일 이름 검색을 나타냅니다.

편집하다:이제 명령을 더 많이 테스트한 후에는 일부 텍스트가 별표와 결합되어 있는 한 인수 값이 따옴표 안에 있는지 여부에 관계없이 내 시스템에서 작동하는 것 같습니다.

$ echo $(find ./ -name *foo)

와 같다

$ echo $(find ./ -name "*foo")

아마도 내가 질문을 오해한 것 아닐까요?

관련 정보