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

Rek*_*son 98 directory bash file find large-files

我们刚刚开始一个UNIX类,正在学习各种Bash命令.我们的任务涉及在一个目录下执行各种命令,该目录下面还有许多文件夹.

我知道如何使用以下方法列出和计算根文件夹中的所有常规文件:

find . -type l | wc -l
Run Code Online (Sandbox Code Playgroud)

但是我想知道从那里去哪里才能找到整个目录中最大的文件.我见过一些关于du命令的事情,但是我们还没有学到这一点,所以在我们学到的所有东西中,我认为我们需要以某种方式将它连接到ls -t命令.

请原谅我,如果我的'行话'不正确,我仍然习惯它!

tam*_*ler 125

这个链接引用 -

如果要查找并打印特定目录及其子目录中的前10个最大文件名(而不是目录)

$ find . -printf '%s %p\n'|sort -nr|head

要将搜索限制到当前目录,请使用"-maxdepth 1"和find.

$ find . -maxdepth 1 -printf '%s %p\n'|sort -nr|head

并打印前10大"文件和目录":

$ du -a . | sort -nr | head

**使用"head -n X"而不是上面唯一的"head"打印顶部X最大的文件(在上面的所有示例中)

  • 啊,你需要添加'k'选项或它显示512字节的倍数而不是1024.du -ak (5认同)
  • 第一个解决方案对我来说不适用于OS X,所以我最终使用快速黑客来过滤掉第三个解决方案中的目录:`du -am.| sort -nr | grep'\ ..*\.' | head`.`m`是以兆字节显示文件大小并使用`grep`来显示至少有两个点的行,第一个在路径中的`./`中,第二个在文件扩展名中,例如`.mov `. (4认同)
  • 对于第一个,如何以人类可读的格式获得大小? (2认同)

xpr*_*ros 59

要查找当前目录及其子目录中的前25个文件:

find . -type f -exec ls -al {} \; | sort -nr -k5 | head -n 25

这将通过"sort -nr -k5"管道命令根据文件大小排序输出前25个文件.

相同但具有人类可读的文件大小:

find . -type f -exec ls -alh {} \; | sort -hr -k5 | head -n 25


nne*_*neo 10

find . -type f | xargs ls -lS | head -n 1
Run Code Online (Sandbox Code Playgroud)

输出

-rw-r--r--  1 nneonneo  staff  9274991 Apr 11 02:29 ./devel/misc/test.out
Run Code Online (Sandbox Code Playgroud)

如果你只想要文件名:

find . -type f | xargs ls -1S | head -n 1
Run Code Online (Sandbox Code Playgroud)

这避免了使用awk并允许您使用您想要的任何标志ls.

警告.因为xargs尝试避免构建过长的命令行,如果在包含大量文件的目录上运行它,则可能会失败,因为ls最终会执行多次.这不是一个不可克服的问题(您可以head -n 1从每次ls调用中收集输出,然后ls -S再次运行,循环直到您拥有单个文件),但它确实在某种程度上损害了这种方法.

  • 要处理带空格的文件名,请使用`find.-type f -print0 | xargs -0 ls -lS | 头-n 1` (2认同)

gho*_*oti 8

如果它们是普通文件,则按递归方式列出文件,按第7个字段排序(find输出中的大小;检查你的文件),并仅显示第一个文件.

find . -type f -ls | sort +7 | head -1
Run Code Online (Sandbox Code Playgroud)

第一个选项find是递归搜索的起始路径.A类f搜索普通文件.请注意,如果您尝试将其解析为文件名,则如果文件名包含空格,换行符或其他特殊字符,则可能会失败.选项sort也因操作系统而异.我正在使用FreeBSD.

一个"更好"但更复杂和更重的解决方案是find遍历目录,但可能用于stat获取有关文件的详细信息,然后可能用于awk查找最大的大小.请注意,输出stat还取决于您的操作系统.

  • 好像你有一个不同的排序程序给我.这是我的排序程序的手册页 - http://linux.die.net/man/1/sort为了在我的机器上工作,你需要明确地使用`-k` arg例如.`sort -k 7`.编辑:通过OSX 10.5,排序的手册页似乎已更改为我的版本. (2认同)

Kal*_*ana 8

没有简单的命令可以找到Linux/UNIX/BSD文件系统上最大的文件/目录.但是,结合以下三个命令(使用管道),您可以轻松找到最大文件列表:

# du -a /var | sort -n -r | head -n 10
Run Code Online (Sandbox Code Playgroud)

如果您想要更多人类可读输出,请尝试:

$ cd /path/to/some/var
$ du -hsx * | sort -rh | head -10
Run Code Online (Sandbox Code Playgroud)

哪里,

  • Var是您要搜索的目录
  • du command -h选项:以人类可读格式显示大小(例如,1K,234M,2G).
  • du command -s选项:仅显示每个参数的总计(摘要).
  • du command -x选项:跳过不同文件系统上的目录.
  • sort命令-r选项:反转比较结果.
  • sort命令-h选项:比较人类可读数字.这只是GNU排序特定选项.
  • head命令-10 OR -n 10选项:显示前10行.


Ste*_*eve 6

这将找到当前工作目录中最大的文件或文件夹:

ls -S /path/to/folder | head -1
Run Code Online (Sandbox Code Playgroud)

要查找所有子目录中的最大文件:

find /path/to/folder -type f -exec ls -s {} \; | sort -nr | awk 'NR==1 { $1=""; sub(/^ /, ""); print }'
Run Code Online (Sandbox Code Playgroud)