-name 뒤의 패턴이 인용되지 않으면 find가 이상하게 동작합니다.

-name 뒤의 패턴이 인용되지 않으면 find가 이상하게 동작합니다.

이상하게도 find에서 -name에 대한 다음 패턴이 예기치 않게 모든 해당 파일 이름을 성공적으로 검색하는 경우가 있습니다. 이는 쉘 구문 분석을 통해서만 현재 디렉토리에서 해당 파일 이름을 찾을 수 있다는 점입니다(따옴표가 없는 검색 도구는 찾을 수 없음).

find /tmp -type f -name *.txt

/tmp/amp_iostat.txt
/tmp/awrrpt_1_7950_7973.txt
/tmp/oplanlog/osys/2014-07-01-12-26-28/log.txt
/tmp/oplanlog/osys/2014-07-01-13-15-33/log.txt
/tmp/oplanlog/osys/2014-07-01-13-17-58/log.txt
/tmp/oplanlog/osys/2014-07-01-13-30-27/log.txt
/tmp/oplanlog/osys/2016-10-27-19-38-50/log.txt
/tmp/pms2_20170427.txt
/tmp/pmsdb1_20170622.txt
/tmp/pmssh1_20160728.txt
/tmp/pmssh1_20160831.txt
/tmp/pmssh1_20161227.txt
/tmp/pmssh1_20170328.txt
/tmp/pmssh1_20170523.txt
/tmp/pmssh1_20170727.txt
/tmp/pmssh1_20170822.txt
/tmp/pmssh2_20170328.txt
/tmp/pmssh_20170119.txt
/tmp/pmssh_20170220.txt
/tmp/sgpms_20140717_1736_summary.txt
/tmp/sgpms_20140717_1736_trace.txt
/tmp/sgpms_20140717_1737_summary.txt
/tmp/sgpms_20140717_1737_trace.txt
/tmp/sgpms_20140717_1739_summary.txt
/tmp/sgpms_20140717_1739_trace.txt
/tmp/sgpms_20140717_1743_summary.txt
/tmp/sgpms_20140717_1743_trace.txt
/tmp/sgpms_20140717_1749_summary.txt
/tmp/sgpms_20140717_1749_trace.txt
/tmp/sgpms_20140717_1751_summary.txt
/tmp/sgpms_20140717_1751_trace.txt

find /tmp -type f -name *.txt|wc -l
      31

답변1

인용이 없는 경우 *.txt이를 준수한다.경로 이름 확장(파일 이름 확장이라고도 함). 이런 일이 일어났어현재 작업 디렉토리(CWD). CWD에 "txt" 확장자를 가진 파일이 포함된 경우 find셸을 호출하기 전에 *.txt인수를 일치하는 파일 이름으로 바꾸면 명령이 다음과 같이 됩니다.

find /tmp -type f -name file1.txt file2.txt file3.txt ...

확장 프로그램이 반환되는지 여부에 따라 적어도 세 가지 결과를 얻을 수 있습니다...

  • ...여러 파일:오류가 발생합니다
  • ...실행 중인 경로의 파일 이름과 일치하는 파일 및 해당 이름 find:테스트는 -name해당 파일 하나만 일치합니다.
  • ...검색 경로의 어떤 파일과도 일치하지 않는 파일: -name아무것도 일치하지 않습니다

반면에 CWD가 수행하는 경우아니요txt 파일을 포함하고 *.txt전달 find하면 참조하는 것과 똑같이 작동합니다.

도덕적: 경로 이름 확장이 실제로 발생하기를 원하지 않는 한 glob을 포함하는 패턴을 사용할 때 항상 따옴표를 사용하십시오( 이 옵션에 대해 의도적으로 find이 작업이 수행되는 경우는 거의 없습니다 ).-name

관련 정보