1

mdls命令可以在 macOS 终端中递归使用吗?是否有替代方法可以让我获得每个文件的列表以及所有mdls信息?ls可以选择给我一些,但不如mdls.

这是在 macOS 终端中的后续问题,“ls | mdls”命令仅适用于主目录

4

1 回答 1

2

如果您使用globstarshell 选项(Bash 4.0 或更新的1),您可以执行以下操作:

shopt -s globstar
mdls -name kMDItemFSName -name kMDItemDateAdded **/*

输出看起来像

kMDItemDateAdded = 2018-07-10 15:33:04 +0000
kMDItemFSName    = "File1.txt"
kMDItemDateAdded = 2018-07-11 17:18:11 +0000
kMDItemFSName    = "File2.txt"

缺点是路径信息丢失。

如果你有很多很多文件,导致命令行太长,你可以循环遍历这些文件:

for f in **/*; do
    printf '%s\t%s\n' "$f" "$(mdls -name kMDItemDateAdded "$f")"
done

输出看起来像

File1.txt       kMDItemDateAdded = 2018-07-10 15:33:04 +0000
File2.txt       kMDItemDateAdded = 2018-07-11 17:18:11 +0000

或者你可以使用find

  • GNU find

    find -printf '%p\t' -exec mdls -name kMDItemDateAdded {} \;
    
  • BSD find

    find . -exec printf '%s\t' {} \; -exec mdls -name kMDItemDateAdded {} \;
    

1其中,在 macOS 中,您必须先安装,例如使用Homebrew

于 2018-08-02T15:44:58.080 回答