我需要找到过去10天内修改过的10个最大的目录,并使用bash按大小对它们进行排序。
我需要以人类可读的格式获取大小。
使用du:
以简单的格式获取目录大小很容易sudo du -h /mypath/ --max-depth=1
但是du没有选择在过去10天内添加修改后的位
这就是为什么我一直在尝试使用find:
sudo find /mypath/e -xdev -depth -type d -ls -mtime 10
但在这种情况下,我无法获得尺寸。
我一直试图在StackOverflow中混合搭配其他几个问题,我发现我可以使用xargs,但输出看起来还不正确:
sudo find /mypath/ -mtime -10 -type d | xargs ls -la
我仍然在尝试很多选择,但我找不到优秀,可靠和优雅的解决方案。
你能帮忙吗?
答案 0 :(得分:2)
您可以使用
sudo find /mypath/ -mtime -10 -type d | xargs ls -ldrt
答案 1 :(得分:1)
不优雅,但是分离最近修改的目录,计算存储,排序结果和显示摘要的一种方法。处理名称中包含空格的文件名,但不包括制表符或换行符。 (为读者练习。)
#!/bin/bash
if [[ ! -d "$1" ]]; then
echo "Usage: $(basename $0) <directory>" >&2
exit 1
fi
find "$1" -mindepth 1 -xdev \
-type d -mtime -10 | # subdirs of $1 modified in last 10 days
xargs -r -n 1 -d $'\n' du -s | # total storage in each such subdir
sort -t $'\t' -k 1nr,1 | # sorted in descending order
head -10 | # first 10 are "top 10"
awk -F $'\t' '{print $2}' | # emit just the subdirs
xargs -r -n 1 -d $'\n' du -sh # total, human-readable, for those 10