확장에 대한 의문

확장에 대한 의문

폴더에 있고 jpg 파일을 찾으려면 다음을 실행할 수 있습니다.

find -type f -name "*jpg"

그런데 왜 큰따옴표를 사용해야 하는지 이해가 되지 않습니다. 그것들이 없으면 경로 이름 확장으로 인해 find 명령이 엉망이 된다는 것을 알고 있지만(폴더에 여러 개의 jpg 파일이 있는 경우) 정확한 이유는 알 수 없습니다. 여기서 인용문이 왜 쉘 확장을 피하지 않는지 잘 모르겠습니다.

답변1

큰따옴표와 작은따옴표 모두 셸에서 파일 이름 확장을 방지합니다.

Find는 디렉터리의 모든 수준을 재귀적으로 탐색한다는 점에서 약간 특별합니다.

-name명령 에서 이 옵션을 인용 하지 않으면 find쉘은 find를 실행하는 디렉토리에서 이름 표현식을 즉시 확장합니다. 이는 파일과 0회, 1회 이상 일치할 수 있습니다.

일치하는 쉘이 없으면 *jpg명령줄에 다시 입력되고 find옵션으로 전달됩니다.

일치하는 경우 실제 이름(예: K3256.jpg)이 find에 전달되므로 해당 이름을 가진 파일만 하위 디렉터리에서 검색됩니다.정밀한이름.

여러 항목이 일치하는 경우 여러 이름이 find 명령줄에 입력되고 인수 구문이 잘못되어 find 실행이 거부됩니다.

Find 자체는 입력하는 모든 디렉토리에서 와일드카드를 확장하는 역할을 담당합니다. 쉘이 잘못된 도움을 제공할 것으로 기대하지 않습니다.

Shell은 find를 새 프로세스로 호출하기 전에 따옴표를 제거합니다. 이렇게 하면 모든 프로그램이 엄밀히 말하면 쉘 구문의 일부인 따옴표를 처리해야 하는 것을 피할 수 있습니다. 하위 프로세스가 인수를 확인하면 해당 인수는 null로 끝나는 문자열 배열로 변환되었으므로 추가 수정이 필요하지 않습니다.

find명령은 셸과 정확히 동일한 방식으로 파일 이름 확장자를 이해하고 작동합니다. 차이점은 find디렉토리의 모든 레벨이 아래로 탐색된다는 점입니다.디렉토리당그 안에 있는 이름 목록을 읽고 해당 수준의 각 이름을 -name 패턴과 일치시킵니다.

또한 이 -type f옵션은 각 하위 디렉터리 내에서도 작동합니다. 디렉터리 항목에도 이 정보가 포함되어 있으므로 find는 디렉터리 트리의 각 분기에서 일치하는 파일 형식과 이름을 다시 처리해야 합니다.

또한보십시오이 답변

관련 정보