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

给定一个目录,我正在寻找一个bash单线程来获得所有文件的recursion列表,其大小和修改时间标签分开,以便于parsing。 就像是:

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

你可以使用stat(1)获取你想要的信息,如果你不想要完整的ls -l输出,你可以使用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而不是人类可读的日期。

找到是完美的递归搜索目录。 -ls操作告诉它以ls -l格式输出结果:

 find /dir/ -ls 

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

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

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

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

如果您喜欢固定宽度的字段而不是制表符,可以将%s更改为%10s

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

请注意,输出顺序将是任意的。 如果你想要一个有序的列表,通过sort管道。

你可以尝试这个从当前文件夹“/ 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 

干杯!