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