“$ mdls -recursive”是否存在?
Does "$ mdls -recursive" exist?
mdls
命令可以在macOS终端递归使用吗?是否有替代方案可以让我获得每个文件的列表以及所有 mdls
信息? ls
可以选择给我一些,但没有 mdls
多。
这是 的后续问题。
如果您使用 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.
mdls
命令可以在macOS终端递归使用吗?是否有替代方案可以让我获得每个文件的列表以及所有 mdls
信息? ls
可以选择给我一些,但没有 mdls
多。
这是
如果您使用 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.