以下脚本接受用户输入(已安装的 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
)