다음 스크립트는 사용자 입력(마운트된 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
.)