首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >解析"mdls“输出

解析"mdls“输出
EN

Unix & Linux用户
提问于 2019-04-16 15:55:50
回答 1查看 1.1K关注 0票数 1

下面的脚本接受一个用户输入(到一个挂载的macOS卷的路径,例如/macOS/Macintosh\ HD/)

代码语言:javascript
复制
#!/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"        

输出:

代码语言:javascript
复制
/Users/swastibhushandeb/Documents/encase_examiner_v710_release_notes.pdf
/Users/swastibhushandeb/Desktop/AirPrint Forensics.pdf

作为下一步,我希望脚本在kMDItemWhereFroms.sh的每个输出上执行mdls (打印与文件关联的所有元数据属性的值),这些输出也可以通过以下方式手动遍历:

代码语言:javascript
复制
 mdls /Users/swastibhushandeb/Documents/encase_examiner_v710_release_notes.pdf

但是,如果这种处理是自动化的,那么可用的bash编码策略/选项是什么?如何将输出定向到csv文件,以便每个列包含来自mdls命令输出的字段?

EN

回答 1

Unix & Linux用户

回答已采纳

发布于 2019-04-16 16:05:59

您可以使用mdfind的S -0选项和xargs一起使用以NUL字符结尾的名称(因此不必担心空格/制表符/换行符等)。

代码语言:javascript
复制
read -e -p 'Path? ' path
mdfind -0 -name 'kMDItemWhereFroms="*"' -onlyin "$path" | xargs -0 mdls

如果您也希望看到路径/文件名(不仅是mdls的输出),它就变得更加详细了:

代码语言:javascript
复制
mdfind -0 -name 'kMDItemWhereFroms="*"' -onlyin "$path" | \
    xargs -0 -n 1 sh -c 'echo "$1" && mdls "$1"' _

(结尾的_只是sh的语法糖,它将第一个参数(通常是命令的名称)分配给$0)

票数 1
EN
页面原文内容由Unix & Linux提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://unix.stackexchange.com/questions/512811

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档