如何在一个目录及其子目录中找到最大的文件?

121
我们刚开始学习UNIX课程,正在学习各种Bash命令。我们的任务涉及对一个包含多个文件夹的目录执行各种命令。
我知道如何使用以下命令列出并计算根文件夹中所有常规文件的数量:
find . -type l | wc -l

但是我想知道从哪里开始才能找到整个目录中最大的文件。我看过一些关于du命令的东西,但我们还没有学习过它,所以在我们已经学过的东西中,我认为我们需要以某种方式将其与ls -t命令连接起来。

如果我的术语不正确,请原谅,我还在适应中!


2
如果你知道某个命令,但不确定如何使用它,请尝试输入man加上你感兴趣的命令。会弹出一个很好的该命令的手册条目(按 q 返回命令行)。 - Dunes
相关:https://unix.stackexchange.com/questions/140367/finding-all-large-files-in-the-root-filesystem - Ciro Santilli OurBigBook.com
17个回答

1
这个命令对我有效:

find /path/to/dir -type f -exec du -h '{}' + | sort -hr | head -10

以人类可读模式列出前10个文件并按大小排序。请注意,保留了HTML标记。

1

du -aS /PATH/TO/folder | sort -rn | head -2 | tail -1

或者

du -aS /PATH/TO/folder | sort -rn | awk 'NR==2'


0

请使用您所需的路径运行以下一行代码。目前我正在运行 /var/log/ 位置。

 (sudo  du -a /var/log/ |sort -nr|head -n20 |awk '{print $NF}'|while read l ;do du -csh $l|grep -vi total;done ) 2> /dev/null

0

这是一个更简单的方法:

ls -l | tr -s " " " " | cut -d " " -f 5,9 | sort -n -r | head -n 1***

你将会得到这个结果:8445 examples.desktop


1*** 在结尾处的作用是什么?我得到了一个“未找到匹配项”的错误。 - user4815162342

0
Linux解决方案:例如,您想按文件/文件夹大小(降序)查看主目录(/)下的所有文件/文件夹列表。

sudo du -xm / | sort -rn | more


0
ls -alR|awk '{ if ($5 > max) {max=$5;ff=$9}} END {print max "\t" ff;}'

0

这个脚本简化了查找最大文件以进行进一步操作的过程。 我将它保存在我的~/bin目录中,并将~/bin添加到我的$PATH中。

#!/usr/bin/env bash
# scriptname: above
# author: Jonathan D. Lettvin, 201401220235

# This finds files of size >= $1 (format ${count}[K|M|G|T], default 10G)
# using a reliable version-independent bash hash to relax find's -size syntax.
# Specifying size using 'T' for Terabytes is supported.
# Output size has units (K|M|G|T) in the left hand output column.

# Example:
#   ubuntu12.04$ above 1T
#   128T /proc/core

# https://dev59.com/JHI_5IYBdhLWcg3wK_3E
# Inspiration for hasch: thanks Adam Katz, Oct 18 2012 00:39
function hasch() { local hasch=`echo "$1" | cksum`; echo "${hasch//[!0-9]}"; }
function usage() { echo "Usage: $0 [{count}{k|K|m|M|g|G|t|T}"; exit 1; }
function arg1() {
    # Translate single arg (if present) into format usable by find.
    count=10; units=G;  # Default find -size argument to 10G.
    size=${count}${units}
    if [ -n "$1" ]; then
        for P in TT tT GG gG MM mM Kk kk; do xlat[`hasch ${P:0:1}`]="${P:1:1}"; done
        units=${xlat[`hasch ${1:(-1)}`]}; count=${1:0:(-1)}
        test -n "$units" || usage
        test -x $(echo "$count" | sed s/[0-9]//g) || usage
        if [ "$units" == "T" ]; then units="G"; let count=$count*1024; fi
        size=${count}${units}
    fi
}
function main() {
    sudo \
        find / -type f -size +$size -exec ls -lh {} \; 2>/dev/null | \
        awk '{ N=$5; fn=$9; for(i=10;i<=NF;i++){fn=fn" "$i};print N " " fn }'
}

arg1 $1
main $size

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接