给定一个目录,我正在寻找一个bash one-liner来获取所有文件的递归列表,其大小和修改时间选项卡分开以便于解析。类似的东西:
cows/betsy 145700 2011-03-02 08:27
horses/silver 109895 2011-06-04 17:43
答案 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
干杯!