如何查找过去10天内修改的10个最大目录,并使用Bash对其进行排序

时间:2017-09-12 15:59:07

标签: linux bash

我需要找到过去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

我仍然在尝试很多选择,但我找不到优秀,可靠和优雅的解决方案。

你能帮忙吗?

2 个答案:

答案 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