如何按创建顺序递归列出目录中的文件



我想按创建顺序列出所有文件,而不是目录。我试过了:

ls -R

它获取了所有的文件,带有一些烦人的格式,我更喜欢逐行排列。然而,我的*nix-foo非常弱,我不确定如何按创建日期订购。

最终,这将在Ruby脚本中完成,因此,如果无法使用神奇的bash命令,那么一些Ruby代码就可以了;我只是觉得使用bash可能很有趣,而且可能更干净。

不幸的是,Linux不存储创建日期。Mac操作系统是这样做的,但它不是一个可移植的,易于阅读的格式。Windows是唯一一个存储它的系统,但Ruby没有任何内部命令可以让你访问它

仔细阅读Ruby的ctime,它经常被误读,表明它只支持"更改"时间。以下是FileFile::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获取它。任何人

我希望这能有所帮助。

最新更新