我有一个类似于以下内容的目录:
-rw-r--r-- 1 root root 223K Apr 28 14:25 2015.04.28_14.25
-rw-r--r-- 1 root root 253K Apr 28 14:55 2015.04.28_14.55
-rw-r--r-- 1 root root 276K Apr 28 15:25 2015.04.28_15.25
-rw-r--r-- 1 root root 254K Apr 28 15:55 2015.04.28_15.55
-rw-r--r-- 1 root root 122K Apr 29 09:08 2015.04.29_09.08
-rw-r--r-- 1 root root 127K Apr 29 09:38 2015.04.29_09.38
-rw-r--r-- 1 root root 67K Apr 29 11:43 2015.04.29_11.43
-rw-r--r-- 1 root root 137K May 1 12:13 2015.04.29_12.13
-rw-r--r-- 1 root root 125K May 1 12:43 2015.04.29_12.43
-rw-r--r-- 1 root root 165K May 1 13:13 2015.04.29_13.13
-rw-r--r-- 1 root root 110K May 1 13:43 2015.04.29_13.43
我的问题是,如何找到每个日期中最大的文件?
例如,4 月 28 日的最大文件、4 月 29 日、5 月 1 日的最大文件等。
操作系统信息:Linux Kali 3.18.0-kali3-amd64 #1 SMP Debian 3.18.6-1~kali2 (2015-03-02) x86_64 GNU/Linux
答案1
在 GNU/任何东西上,
ls -l --time-style=+%s \
| awk '{$6 = int($6/86400); print}' \
| sort -nk6,6 -nrk5,5 \
| sort -sunk6,6
这将为您提供 UTC 边界,根据需要将本地时间偏移添加到计算中,例如 int(($6-7*3600)/86400) 表示 -0700 午夜边界。
答案2
基于stat
获取文件信息并awk
确定每个日期的最大值的方法:
stat -c $'%.10y\t%s\t%n' * |
awk 'BEGIN { FS=OFS="\t" }
s[$1]<$2 { s[$1]=$2 ; n[$1]=$3 }
END { for (d in n) print d,s[d],n[d] | "sort" }'
输出将是Tab
(日期、大小、文件名)元组的单独列表。
答案3
我将围绕使用“ls”编写脚本来按大小顺序获取文件(然后限制结果以获得最大的结果)。
例如,如果执行“ls -lS 2015.04.29*”,您将获得按大小降序排列的文件列表。或者 'ls -lS 2015.04.29*|head -1' 应该给你最大的。
从那里,您可以根据您的需要仅删除文件名等(以及循环遍历文件名中找到的所有日期以获得所有日期等中最大的日期)。本质上只是一个基于日期的 for 循环和 ls 命令来获取每个日期的最大值。