我想按创建顺序列出所有文件,而不是目录。我试过了:
ls -R
它获取了所有的文件,带有一些烦人的格式,我更喜欢逐行排列。然而,我的*nix-foo非常弱,我不确定如何按创建日期订购。
最终,这将在Ruby脚本中完成,因此,如果无法使用神奇的bash命令,那么一些Ruby代码就可以了;我只是觉得使用bash可能很有趣,而且可能更干净。
不幸的是,Linux不存储创建日期。Mac操作系统是这样做的,但它不是一个可移植的,易于阅读的格式。Windows是唯一一个存储它的系统,但Ruby没有任何内部命令可以让你访问它
仔细阅读Ruby的ctime
,它经常被误读,表明它只支持"更改"时间。以下是File
和File::Stat
:中ctime
的文档
返回文件的更改时间(即时间目录有关文件的信息已更改,而不是文件本身)。
Dir['**/*'].reject { |f| File.directory?(f) }.sort_by { |f| File.ctime(f) }
为此,我通常使用
find . -type f -print0 | xargs -0 ls -ltrh
您可以为ls提供所需的所有格式参数。
另请参阅:http://en.wikipedia.org/wiki/Xargs
GNU find可以帮助你,试试这个第一个
find . -type f -printf "%C+t%Mt%pn" | sed 's/+/ /' | sort -t" " +0 -1
它可能会起作用。
但是,我正在使用
find (GNU findutils) 4.4.2
我无法让%C+
的东西工作。
因此,我提出了一个长手printf格式字符串,作为一个额外的好处,它不需要sed后处理。
find . -type f -printf '%CY-%Cm-%Cd.%CH%CM%CSt%Mt%pn' | 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
。有很多参数可用于以任何方式格式化列表。
我注意到你说"想要订单,他们是创建的"。Unix为文件存储了三个时间戳,其中不包括创建时间,因此您可以将显示信息用作
%A File's last access time
%C File's last status change time
%T File's last modification time
人们通常认为%C一定意味着创建时间,但正如您在上面看到的,它是"状态更改时间",我认为这是最后一次更改任何文件权限。因此,在可能的情况下,这将是文件创建时间,但这并没有增加。(sp)。
手册页没有指出,因为Windows存储创建时间,所以您可以使用find
获取它。任何人
我希望这能有所帮助。