Shell脚本以递归方式列出dir中较大的文件

时间:2010-12-15 14:43:16

标签: bash shell find

Shell脚本以递归方式列出dir中的文件,这是巨大的。我正在使用:

 find <path> -mtime +20 -exec ls -ls {} \; | sort -n -r | head -100 | awk '{print $10}'

的问题:

  • 执行较慢
  • 我没有在几个子目录中读取权限

有没有更好的方法来实现这一目标?我试过了:

du <path> | sort -n -r | head -n 100

快得多但不那么有效。

4 个答案:

答案 0 :(得分:1)

根据您find找到的文件的大小分布,您可能会考虑使用-size谓词清除大量较小的鱼,然后将列表转储到sort }。如果这是您定期运行的内容,请在开始从head获得少于100行时进行记录,并将其用作表示是时候降低您提供find的大小限制的时间。

如果没有获得对相关目录的权限更改或升级您的权限以便您可以阅读权限,那么您将无法解决权限问题。

答案 1 :(得分:1)

du几乎就在那里,试试

du -aS | sort -n -r | head -n 100

只返回不包含任何目录的大文件

答案 2 :(得分:1)

find有一个方便的-printf指令:

find . -type f -printf "%s\t%p\n" | sort -nr | head -n 100

答案 3 :(得分:0)

find -size + k -atime + -printf“%s,\ t%a,\ t%p \ n”| sort -nr

将为您提供所需的输出

这里sike在kb上,年龄是最后一次访问时间。