如何在服务器上递归生成含所有者、路径及大小的可过滤文件列表?
生成可过滤的服务器文件存储统计列表
用find命令生成结构化输出(推荐)
find是递归遍历目录的最佳工具,配合-printf参数可以精准控制输出字段,完美匹配你需要的四列信息:
find /你要监控的目录 -type f -printf "%u\t%f\t%h\t%s\n" > filelist.txt
各字段说明:
%u:文件所有者的用户名%f:仅文件名(不含路径)%h:文件所在的完整目录路径%s:文件大小(单位:字节)\t:用制表符分隔字段,方便后续用表格工具、awk或sort做过滤/排序
如果需要人类可读的大小格式(如KB/MB/GB),可以结合du命令实现:
find /你要监控的目录 -type f -exec du -h {} + | while read size path; do user=$(stat -c "%U" "$path") filename=$(basename "$path") dir=$(dirname "$path") echo -e "$user\t$filename\t$dir\t$size" done > filelist.txt
用stat配合shell递归匹配
如果你的shell支持**递归通配(比如bash需先执行shopt -s globstar开启),可以直接用stat批量输出:
shopt -s globstar stat -c "%U %n %s" /你要监控的目录/**/* | awk '{ user = $1 size = $NF path = substr($0, index($0, $2), length($0) - length(user) - length(size) - 2) filename = gensub(".*/", "", 1, path) dir = gensub("/[^/]+$", "", 1, path) print user "\t" filename "\t" dir "\t" size }' > filelist.txt
常用过滤与统计操作
生成制表符分隔的文件后,可快速完成这些操作:
- 按文件大小排序(字节格式):
sort -k4 -n filelist.txt - 按人类可读大小排序:
sort -k4 -h filelist.txt - 筛选特定用户的文件:
awk '$1 == "your_username"' filelist.txt - 统计某目录下所有文件的总大小:
awk '$3 == "/target/dir" {sum+=$4} END {print sum " bytes"}' filelist.txt
内容的提问来源于stack exchange,提问作者user2355903
相关产品推荐
相关产品推荐

