如何列出超出指定大小限制的所有文件和文件夹?

如何列出超出指定大小限制的所有文件和文件夹?

在一个分区中我有几个文件和文件夹,我可以du像这样列出所有这些文件的大小:

du -h

但是我如何列出超出特定磁盘空间大小(例如 5MB)的所有文件?

答案1

find /home/stephenm/ -maxdepth 1 -size +20k -exec du -h {} \;

这应该会列出 /home/stephenm 中超过 20k 的所有内容

要递归到子目录,请删除该-maxdepth 1选项。

答案2

注意:du不会打印文件的大小,而是给您提供文件空间使用情况的估计值。

您可以创建一个 10 MB 的文件,其占用的内存要少得多:

dd if=/dev/zero of=file seek=10M count=1 bs=1
stat -c %s file
ls -lh file
du -h file
cat file | wc

一个例子是压缩文件,它占用的磁盘空间小于其大小,就像上面的例子一样稀疏文件

在上面的例子中,即使小于 5Mfind . -type f -size +5M也会输出。filedu

如果您知道文件名中没有换行符,则可以find使用以下命令过滤输出:

find . -type f -size +5M | while IFS= read -r file; do
  du=$(du -k "$file")
  size="${du%%$(printf "\t")*}"
  if test $size -gt $((5 * 1024)); then
    echo "$file"
  fi
done

echo如果您的文件名中可以​​有换行符,则可以使用此 GNU 扩展,但在循环中使用其他内容:

find . -type f -size +5M -print0 | while IFS= read -r -d '' file; do
  du=$(du -k "$file")
  size="${du%%$(printf "\t")*}"
  if test $size -gt $((5 * 1024)); then
    echo "$file"
  fi
done

答案3

以下是 bash 中的一个直接解决方案,它可以分析文件和文件夹的大小:

#!/bin/bash

folder="$1"
limit="$2"

IFS=$'\n'
for item in `find "$folder"`; do
    size=$(du -s "$item" | cut -f1)
    if [ $size -gt $limit ]; then
        echo $item
    fi
done

第一个参数是检查的目标文件夹,
第二个参数是千字节的限制,其中 1K=1024 字节。

相关内容