解析“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 编码策略/选项?如何将输出定向到 csv 文件,以便每列包含mdls命令输出中的字段?

答案1

您可以使用mdfind's-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

相关内容