我想按照创建顺序列出所有文件,而不是目录。我试过了:
ls -R
获取所有文件,有一些烦人的格式,我更喜欢逐行。但是,我的* nix-foo非常弱,我不确定如何按创建日期订购。
最终这将在Ruby脚本中完成,所以如果使用魔法bash命令无法实现,那么一些Ruby代码就可以了;我只是觉得使用bash可能很有趣并且可能更干净。
答案 0 :(得分:1)
Dir['**/*'].reject { |f| File.directory?(f) }.sort_by { |f| File.ctime(f) }
答案 1 :(得分:1)
为此目的,我通常使用
find . -type f -print0 | xargs -0 ls -ltrh
您可以为ls提供所需的所有格式参数。
答案 2 :(得分:1)
不幸的是,Linux不存储创建日期。 Mac OS可以,但它不是便携式,易读的格式。 Windows是唯一存储它的系统,但Ruby没有任何可以访问它的内部命令。
仔细阅读Ruby ctime
,这经常被误读,表明它只支持“改变”时间。以下是来自ctime
和File
的{{1}}的文档:
返回文件的更改时间(即时间目录 有关文件的信息已更改,而不是文件本身。
答案 3 :(得分:0)
GNU find可以帮到你,先试试这个
find . -type f -printf "%C+\t%M\t%p\n" | sed 's/+/ /' | sort -t" " +0 -1
它可能有用。
但是,我正在使用
find (GNU findutils) 4.4.2
我无法让%C+
的东西工作。
所以我提出了一个长手的printf格式字符串,作为额外的好处,不需要sed后处理。
find . -type f -printf '%CY-%Cm-%Cd.%CH%CM%CS\t%M\t%p\n' | sort +0 -1n
其中输出如
2011-03-30.141038.0000000000 -rw-r--r-- ./pkgs/libxml2/libxml2-22011-03-30.140959.0000000000 -rwxr-xr-x ./pkgs/libxml2/libxml2-2.7.7/doc/examples/.libs/reader3.exe
2011-03-30.141001.0000000000 -rwxr-xr-x ./pkgs/libxml2/libxml2-2.7.7/doc/examples/.libs/reader3_ltshwrapper
2011-03-30.141001.0000000000 -rwxr-xr-x ./pkgs/libxml2/libxml2-2.7.7/doc/examples/reader3.exe
2011-03-30.141002.0000000000 -rw-r--r-- ./pkgs/libxml2/libxml2-2.7.7/doc/examples/.deps/tree2.Po
2011-03-30.141002.0000000000 -rw-r--r-- ./pkgs/libxml2/libxml2-2.7.7/doc/examples/tree2.o
每个时间戳上的尾随.0000000000
是小数秒,显然我的系统没有记录。您可以使用%TX
获得HH:MM:SS格式。
如果您需要在文件列表中添加其他字段(我将权限作为额外内容),请执行man find
,然后搜索-printf
。有很多参数可用于按照您需要的任何方式格式化列表。
我注意到你说'他们想要订购它们是'#39;。 Unix有三个存储文件的时间戳,不包括创建时间,所以你可以使用显示信息
%A File's last access time
%C File's last status change time
%T File's last modification time
人们通常认为%C必须意味着创造时间,但正如你所看到的那样,它的状态是更改时间',我认为这是上次任何文件权限已经改变。因此,对于可能是文件创建时间的情况,但它没有保证。 (SP)。
联机帮助页并不表示因为Windows存储了创建时间,所以您可以使用find
获取它。任何人吗?
我希望这会有所帮助。