
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
인용한 것과 정확히 동일하게 작동합니다.
도덕적: find
실제로 경로 이름 확장이 발생하기를 원하지 않는 한 glob을 포함하는 패턴 주위에 항상 따옴표를 사용하십시오(이 옵션에 대해 의도적으로 수행되는 경우는 거의 없습니다 -name
).