mdfind를 사용하여 정확한 파일 이름이 지정된 파일 찾기

mdfind를 사용하여 정확한 파일 이름이 지정된 파일 찾기

mdfind정확한 파일 이름으로 파일 이름을 검색하도록 요구하는 방법이 있습니까 ?

파이프라인의 어느 시점에서는 다음과 같은 내용이 표시됩니다.

(filenames are produced here) | while read f; do mdfind -name "$f" | grep -E "/$f";

두 가지 질문이 있습니다.

  • 파일 이름에 다음이 포함된 경우 +:

    grep: repetition-operator operand invalid

  • 파일 이름에 괄호가 포함되어 있으면 결과는 비어 있습니다.

이 문제를 어떻게 해결할 수 있나요?

답변1

매뉴얼 페이지의 기능을 활용하십시오. ;)

mdfind의 매뉴얼 페이지는 다음과 같이 말합니다.

 -literal    Force the provided query string to be taken as a literal query string, without interpretation.

이 옵션이 없으면 mdfind는 "*", "+" 및 "()"와 같은 문자를 정규식으로 해석합니다.

파일 이름의 메타데이터 속성은 입니다 kMDItemFSName. 따라서 특정 이름을 가진 파일을 찾으려면 다음을 수행하십시오.

mdfind -literal 'kMDItemFSName = "somefile.txt"'

mdls /path/to/somefile.txt보너스 팁: 다음을 사용하여 파일의 메타데이터를 확인할 수도 있습니다 .

답변2

여기에는 정규 표현식이 필요하지 않다고 생각합니다. 고정 문자열을 검색하려면 grep을 사용해 보세요. 스위치를 사용하여 고정 문자열 일치를 활성화할 수 있습니다 -F.

명령줄이 다음과 같다고 가정하면

(filenames are produced here) | \
while read f ; \
    do mdfind -name "$f" | grep -F "/$f" ; \
done

관련 정보