如何递归列表文件的大小和上次修改时间?

时间:2011-08-06 03:31:47

标签: linux bash

给定一个目录,我正在寻找一个bash one-liner来获取所有文件的递归列表,其大小和修改时间选项卡分开以便于解析。类似的东西:

cows/betsy       145700    2011-03-02 08:27
horses/silver    109895    2011-06-04 17:43

4 个答案:

答案 0 :(得分:10)

如果您不想要完整的ls -l输出,可以使用stat(1)来获取所需的信息,并且可以使用find(1)来获取递归目录列表。将它们组合成一行,你可以这样做:

# Find all regular files under the current directory and print out their
# filenames, sizes, and last modified times
find . -type f -exec stat -f '%N %z %Sm' '{}' +

如果您希望输出更易解析,可以使用%m代替%Sm将最后修改时间作为time_t而不是人类可读日期。

答案 1 :(得分:6)

find非常适合递归搜索目录。 -ls操作告诉它以ls -l格式输出结果:

find /dir/ -ls

在Linux计算机上,您可以使用-printf操作打印自定义输出:

find /dir/ -printf '%p\t%s\t%t\n'

有关man find可用格式说明符的完整详细信息,请参阅-printf。 (这不是POSIX兼容的,可能在其他UNIX版本上不可用。)

答案 2 :(得分:2)

find * -type f -printf '%p\t%s\t%TY-%Tm-%Td %Tk:%TM\n'

如果您更喜欢固定宽度字段而非标签,则可以执行更改%s%10s等操作。

我使用find * ...来避免每个文件名上的前导“./”。如果您不介意,请使用.而不是*(还会显示名称以.开头的文件)。您还可以通过sed 's/^\.\///'管道输出。

请注意,输出顺序是任意的。如果您想要有序列表,请通过sort

答案 3 :(得分:1)

您可以尝试使用名为“/ from_dir”

的当前文件夹进行递归列表
find /from_dir/* -print0 | xargs -0 stat -c “%n|%A|%a|%U|%G” > permissions_list.txt


列出文件和目录会传递给stat命令,并将所有信息放入名为permissions_list.txt的文件中

“%n |%A |%a |%U |%G”会在文件中显示以下结果:

from_
    dir|drwxr-sr-x|2755|root|root
    
from_dir/filename|-rw-r–r–|644|root|root

干杯!