ABC_MPSC라는 디렉토리에 프로그래밍 방식으로 배치될 ABC.jpg와 같은 이미지를 찾아야 합니다. 나는 시도했다:
cd /
find . -name "ABC_MPSC/ABC.jpg"
그러나 이것은 아무것도 반환하지 않습니다. (나는 실제로 내가 검색하고 있는 특정 콘텐츠가 어디에 있는지 알고 있으므로 그것이 존재한다는 것을 압니다.) 수동으로 검색할 필요가 없도록 해주는 find 명령이 있습니까?
답변1
다음은 -path
유용한 술어입니다:
find . -path '*/ABC_MPSC/ABC.jpg'
현재 경로 이름이 패턴 일치 표기법에 설명된 패턴 일치 표기법을 사용하는 패턴과 일치하는 경우 호스트 변수는 true로 평가되어야 합니다. 파일 이름 확장 패턴의 추가 규칙은 확장이 아닌 일치 작업이므로 적용되지 않습니다.
당신이 실패하는 이유는 술어 -name "ABC_MPSC/ABC.jpg"
때문입니다 .-name
현재 경로 이름의 기본 이름이 패턴과 일치하면 true로 평가됩니다.
즉, -name
한 번도 본 적이 없는목차현재 파일 이름 중 기본 파일 이름 자체만(예: ABC.jpg)
답변2
두 가지 방법(제외사용-path
):
디렉터리를 찾은 다음 파일을 검색합니다.
find / -type d -name 'ABC_MPSC' -exec test -f {}/ABC.jpg \; -print
이는 발견된 디렉토리의 현재 경로 이름으로
find
확장되는 구현 에 의존합니다 .{}
/ABC.jpg
필수의이 작업을 수행할 수 있어야 합니다.) 다음과 같이 쓸 수도 있습니다.find / -type d -name 'ABC_MPSC' \ -exec sh -c 'test -f "$1"/ABC.jpg' sh {} \; -print
파일을 찾아 상위 디렉터리 이름을 확인하세요.
find / -type f -name 'ABC.jpg' -exec sh -c ' case $(dirname "$1") in */ABC_MPSC) exit 0 ;; *) exit 1 esac' sh {} \; -print
-path
두 가지 대안 모두 Jeff가 보여준 방식보다 느릴 것입니다. 그래도 다른 용도로 적합할 수 있으므로 여기에 예시로 남겨 두겠습니다.