给定一个目录,我正在寻找一个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
干杯!