是否可以列出从ls等命令行工具添加到文件夹的按日期排序的文件?


10

我需要构建一个脚本,该脚本以与扩展坞中默认的“下载”文件夹相同的顺序显示文件,并按“添加日期”的顺序进行排列,最新的排在第一位。我似乎在中找不到该选项ls

还有其他方法吗?


显示在哪里
罗布

命令行!。知道了!我最终写了一个能做到这一点的衬板。由于我的声誉不高,所以我无法回答自己的问题,以后再说。
Ramiro Araujo 2013年

欢迎来到拉米罗(Ramiro)网站-您应该可以随时回答自己的问题-但是将“标记为接受”的答案存在限制。随时根据需要修改我的答案,或者在需要时提供自己的答案。
bmike

Answers:


6

更简单(更快)的解决方案:

mdls -name kMDItemFSName -name kMDItemDateAdded -raw * | \
xargs -0 -I {} echo {} | \
sed 'N;s/\n/ /' | \
sort

1
是的,要好得多:)
拉米罗·阿劳霍

有人可以详细说明每行内容吗?另外,此解决方案可以在终端中作为单独的命令行(依次一个接一个地)执行,还是仅在脚本中执行?
EJ麦

4

添加的日期存储为元数据项,kMDItemDateAdded并且该mdls命令将公开作为参数传递给每个文件的数据。

因此,要以任意顺序*在Shell中扩展为“下载”中所有文件添加的日期*由您的shell扩展,您可以:

mdls -name kMDItemDateAdded〜/ Downloads / *

您需要将find和sed / awk / perl /组合在一起,以组合替换,ls但是脚本可以调用mdfind,而无需重新发明ls和解析该输出。


1
是! 后来我找到了它,并制作了一个漂亮的班轮,它教给我很多东西:)感谢您的帮助
Ramiro Araujo

2
通过编辑我的答案来粘贴该衬纸-分享知识!
bmike

2

好吧,像往常一样,在写完问题之后,我开始挖掘文件中的元数据内容,并最终编写了以下代码:

ls -a | \
grep -v '^\.$\|^\.\.$' | \
xargs -I {} mdls -name kMDItemFSName -name kMDItemDateAdded {} | \
sed 'N;s/\n//' | grep -v '(null)' | \
awk '{print $3 " " $4 " " substr($0,index($0,$7))}' | \
sort -r

基本上它是:1.列出所有文件2.过滤掉。和.. 3.获取添加的名称和日期,在另一行之后添加一行4.将每两行合并为1行5.提取日期,时间和名称6.对其进行反向排序(由于datetime在前,因此按约会时间)

希望它能帮助别人!:)

@bmike实际上,由于我缺乏声誉,该网站强加我只在发布问题8小时后才回答我自己的问题的限制:D


哦,为了清楚起见,我将一根衬里分成几行:)
Ramiro Araujo 2013年

1
使用ls -A代替,-a这样您就不必grep -vfor ...
mfilej

0

人ls

 -U      Use time of file creation, instead of last modification for
         sorting (-t) or long output (-l).

1
是的,我需要添加日期,而不是创建日期。与扩展坞中的默认下载文件夹相同
Ramiro Araujo,2013年

如何添加日期与创建日期不同?
杰森

1
杰森(Jason)-创建日期是文件创建的日期,因此当Safari从另一台计算机下载文件时,显然已为该下载创建了文件,或者可能在下载发生前几个月或几年就创建了文件。见我的答案在那里这些数据都存储在OS X上的细节
bmike
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.