是否存在“ $ mdls -recursive”?

时间:2018-08-02 09:00:22

标签: macos shell ls mdls

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

这是In the macOS terminal, "ls | mdls" commands are only working for the home directory的后续问题。

1 个答案:

答案 0 :(得分:2)

如果使用globstar shell选项(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