在进行最近的一些研究时,我捕获了几千个图像和视频文件。
要报告我的数据,我需要搜索特定目录并按实际创建日期计算所有文件,并将结果输出到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>
我试图找到我需要的字符串,但到目前为止还没有成功,这让我在这个过程中疯狂尝试。
您是否可以根据实现预期结果的需要进行指导?
答案 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
如果您将其传递到sort
和uniq
,您可以计算每行重复的频率:
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
如果您对扩展程序jpg
和mov
重复此操作,并将其放在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