"mdls" 출력 구문 분석

"mdls" 출력 구문 분석

다음 스크립트는 사용자 입력(마운트된 macOS 볼륨의 경로, 예: /Volumes/Macintosh\ HD/)을 허용합니다.

#!/bin/bash
# Author: Swasti Bhushan Deb
# macOS 10.13.3
# kMDItemWhereFroms.sh

read -e -p "Enter the full path to the Mounted Volume (e.g /Volume /Macintosh HD):   " path
 var=$(mdfind -name 'kMDItemWhereFroms="*"' -onlyin "$path")
 echo "$var"        

산출:

/Users/swastibhushandeb/Documents/encase_examiner_v710_release_notes.pdf
/Users/swastibhushandeb/Desktop/AirPrint Forensics.pdf

다음 단계로 각 출력에서 ​​스크립트를 실행하고 싶습니다 mdls(파일과 관련된 모든 메타데이터 속성의 값을 인쇄).kMDItemWhereFroms.sh, 또는 다음을 통해 수동으로 실행할 수 있습니다.

 mdls /Users/swastibhushandeb/Documents/encase_examiner_v710_release_notes.pdf

그러나 이러한 처리를 자동화하려면 어떤 bash 코딩 전략/옵션을 사용할 수 있습니까? 각 열에 mdls명령 출력의 필드가 포함되도록 출력을 csv 파일로 지정하려면 어떻게 해야 합니까 ?

답변1

mdfind' -0옵션을 사용하면 xargs찾은 이름이 NUL 문자로 끝나도록 할 수 있습니다(따라서 공백/탭/줄바꿈 등에 대해 걱정할 필요가 없습니다).

read -e -p 'Path? ' path
mdfind -0 -name 'kMDItemWhereFroms="*"' -onlyin "$path" | xargs -0 mdls

출력뿐만 아니라 경로/파일 이름도 보려면 mdls더 복잡해집니다 .

mdfind -0 -name 'kMDItemWhereFroms="*"' -onlyin "$path" | \
    xargs -0 -n 1 sh -c 'echo "$1" && mdls "$1"' _

( _마지막 것은 단지 구문상의 설탕이며 sh첫 번째 인수(일반적으로 명령 이름)를 에 할당합니다 $0.)

관련 정보