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

wha*_*ave 6 linux bash

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

cows/betsy       145700    2011-03-02 08:27
horses/silver    109895    2011-06-04 17:43
Run Code Online (Sandbox Code Playgroud)

Ada*_*eld 10

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' '{}' +
Run Code Online (Sandbox Code Playgroud)

如果要使输出更易于解析,可以使用%m而不是%Sm将上次修改时间作为time_t人类可读日期.


Joh*_*ica 6

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

find /dir/ -ls
Run Code Online (Sandbox Code Playgroud)

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

find /dir/ -printf '%p\t%s\t%t\n'
Run Code Online (Sandbox Code Playgroud)

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