다음 지침이 있습니다.
- 가 있는 디렉토리에서 모든
/x/y/z
확장자를 찾으십시오.jpg
. - 일치하는 목록 작성파일 이름, 한 줄에 하나씩 파일에
/x/y/file1.txt
. - 각 파일의 절대 경로를 지정해야 합니다.
이 설명을 이해하는 데 도움을 주실 수 있나요? 처음에는 다음 명령을 사용하려고 생각했습니다.
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