终端命令 - 使用(kMDItemContentCreationDate)查找和计算文件

时间:2017-08-15 14:15:33

标签: macos search terminal find metadata

在进行最近的一些研究时,我捕获了几千个图像和视频文件。

要报告我的数据,我需要搜索特定目录并按实际创建日期计算所有文件,并将结果输出到csv,以便我可以进一步过滤和操作数据。

我的挑战是了解使用元数据属性(例如kMDItemContentCreationDate

)计算文件所需的语法

我希望最终的报告格式类似于这种结构(没有 - ):

 DD/MM/YYY -- TYPE -- COUNT<br>
 01/01/2017 -- .JPG -- 12<br>
 02/01/2017 -- .JPG -- 19<br>
 03/01/2017 -- .JPG -- 11<br>
 04/01/2017 -- .JPG -- 27<br>

我试图找到我需要的字符串,但到目前为止还没有成功,这让我在这个过程中疯狂尝试。

您是否可以根据实现预期结果的需要进行指导?

1 个答案:

答案 0 :(得分:0)

如果您在终端中运行此命令,则可以获取所有JPG个文件的日期:

mdls -name kMDItemContentCreationDate *jpg

输出看起来像这样:

kMDItemContentCreationDate = 2017-08-08 08:50:54 +0000
kMDItemContentCreationDate = 2017-08-19 06:59:09 +0000
kMDItemContentCreationDate = 2017-08-04 06:42:50 +0000
kMDItemContentCreationDate = 2017-02-05 14:46:41 +0000
kMDItemContentCreationDate = 2013-03-09 08:59:50 +0000
kMDItemContentCreationDate = 2017-08-04 06:52:36 +0000
kMDItemContentCreationDate = 2017-08-08 08:55:01 +0000
kMDItemContentCreationDate = 2017-08-08 08:55:37 +0000
kMDItemContentCreationDate = 2017-08-08 08:56:39 +0000
kMDItemContentCreationDate = 2017-08-04 06:44:02 +0000
kMDItemContentCreationDate = 2017-08-08 08:57:28 +0000

如果添加一些awk,则只能在第三个字段中提取日期:

mdls -name kMDItemContentCreationDate *jpg | awk '{print $3}'

输出将如下所示:

2017-08-08
2017-08-19
2017-08-04
2017-02-05
2013-03-09
2017-08-04
2017-08-08
2017-08-08
2017-08-08
2017-08-04
2017-08-08

如果您将其传递到sortuniq,您可以计算每行重复的频率:

mdls -name kMDItemContentCreationDate *jpg | awk '{print $3}'| sort -n | uniq -c
1 2013-03-09
1 2017-02-05
3 2017-08-04
5 2017-08-08
1 2017-08-19

如果您对扩展程序jpgmov重复此操作,并将其放在HOME目录中名为go的脚本中:

#!/bin/bash
shopt -s nullglob nocaseglob
for ext in jpg mov; do
   echo Checking extension $ext ...
   mdls -name kMDItemContentCreationDate *$ext | awk '{print $3}' | sort -n | uniq -c
done

然后你可以让它可执行(只做一次):

chmod +x $HOME/go

然后您可以将目录更改为您喜欢的任何位置并运行它:

cd Somewhere/with/a/bunch/of/pictures/and/movies
$HOME/go

示例输出

Checking extension jpg ...
   1 2013-03-09
   1 2017-02-05
   3 2017-08-04
   5 2017-08-08
   1 2017-08-19
Checking extension mov ...
   2 2017-08-20

如果您真的很挑剔并且想要或多或少地想要,请将脚本更改为:

#!/bin/bash
pwd
shopt -s nullglob nocaseglob
for ext in jpg mov; do
   echo Checking extension $ext ...
   mdls -name kMDItemContentCreationDate *$ext | awk '{print $3}' | sort -n | uniq -c | awk -v ext=$ext '{print $2,ext,$1}'
done

示例输出

/Users/mark/tmp
Checking extension jpg ...
2013-03-09 jpg 1
2017-02-05 jpg 1
2017-08-04 jpg 3
2017-08-08 jpg 5
2017-08-19 jpg 1
Checking extension mov ...
2017-08-20 mov 2