"찾기" 명령 설명

"찾기" 명령 설명

다음 지침이 있습니다.

  1. 가 있는 디렉토리에서 모든 /x/y/z확장자를 찾으십시오 .jpg.
  2. 일치하는 목록 작성파일 이름, 한 줄에 하나씩 파일에 /x/y/file1.txt.
  3. 각 파일의 절대 경로를 지정해야 합니다.

이 설명을 이해하는 데 도움을 주실 수 있나요? 처음에는 다음 명령을 사용하려고 생각했습니다.

find /x/y/z -name '*.jpg' -exec basename '{}' >> /x/y/file1.txt \;

그러나 마지막 명령(...절대 경로)을 보면 다음과 같습니다.

find /x/y/z -name '*.jpg' -exec pathname '{}' >> /x/y/file1.txt \;

질문/지시(명령)에 대한 올바른 응답은 무엇입니까?

답변1

이 답변에서는 설명의 두 번째 지점이 실제로 "파일 이름"이 아니라 "경로 이름"을 의미한다고 가정합니다. 그렇지 않으면 세 번째 요점은 의미가 없습니다.

기본적으로 find유틸리티는 최상위 검색 경로를 기준으로 찾은 파일의 전체 경로를 출력합니다.

지휘 중

find /x/y/z -name '*.jpg' -print

... find경로 이름을 인쇄합니다. 예를 들어 /x/y/z/foo/bar/baz.jpg최상위 검색 경로가 디렉토리의 절대 경로 이름인 경우 자동으로 찾은 파일의 절대 경로 이름이 출력됩니다.

반면에, 당신이 사용하는 경우

find x/y/z -name '*.jpg' -print

/(처음 부분에 누락된 항목이 있음을 확인하십시오. x/y/z) 그러면 분명히 상대 경로 이름이 포함된 출력을 얻게 됩니다.

Linux에서 유틸리티를 사용하여 절대 경로 이름으로 변환할 수 있습니다 realpath.

find x/y/z -name '*.jpg' -exec realpath {} +

이것은 realpath발견된 경로 이름의 배치를 호출합니다.

Linux가 아닌 시스템에서는 GNU coreutils가 설치된 경우 realpath동일한 유틸리티를 설치할 수 있습니다(그러나 호출할 수도 있음 ).grealpath

man realpath(또는 ) 도 참조하세요 man grealpath.


지침 을 다시 읽어보면 find.find

이 연습은 다음으로도 해결할 수 있습니다.

printf '%s\n' /x/y/z/*.jpg >/x/y/file1.txt

.jpg로 끝나는 디렉토리의 모든 이름이 나열됩니다 /x/y/z. 편리한 디렉토리에 대한 절대 경로가 없으면 다음을 사용하십시오.

realpath x/y/z/*.jpg >/x/y/file1.txt

관련 정보