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.outfindfind

패턴을 인용하면 셸은 그대로 유지되고 따옴표를 제거하면 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")

어쩌면 내가 질문을 오해했을까요?

관련 정보