如何按文件大小排序查找结果

时间:2014-03-23 22:50:50

标签: shell sorting find

如何按文件大小排序find命令的结果?

我尝试对此find命令的结果进行排序:

find ./src -type f -print0

我不想要目录的大小,我需要按大小排序的文件相对路径。

5 个答案:

答案 0 :(得分:5)

以下是使用find命令

的方法
find . -type f -exec ls -al {} \; | sort -k 5 -n | sed 's/ \+/\t/g' | cut -f 9

以下是使用递归ls命令的方法:

ls -lSR | sort -k 5 -n

或者,如果您只想显示文件名:

ls -lSR | sort -k 5 -n | sed 's/ \+/\t/g' | cut -f 9

答案 1 :(得分:1)

find -type f -exec du -sm {} \; | sort -nk1

MiB中的大小,路径是相对的。

答案 2 :(得分:0)

解析 ls 或其变体会增加不必要的复杂性。

按文件大小排序的文件路径:

find src -type -printf '%s\t%p\n' | sort -n | cut -f2-

注意:

  • sort -n更改为sort -nr以获得相反的顺序
  • 这个问题有-print0,但是迎合包含换行符的文件名似乎很古怪。

  • 该问题提到了相对路径,将%p更改为%P将在src/下获得相对路径

答案 3 :(得分:0)

find /folder -type f -exec ls -S {} +

警告!我使用的不是-exec ... \;,而是-exec ... {} +。这种构造并不会删除找到的每个文件,而是等待,同时将找到所有文件,然后将它们作为一个大参数列表放入一个命令(这次是ls)中。 然后ls会查看文件,并且由于键-S会按大小对文件进行排序,首先是最大。

答案 4 :(得分:0)

从字面上看,这些答案都没有真正起作用。

这就是我的作品。

#!/bin/bash
################# ls-by-min ################
##  List By Min File Size                 ##
##  Copyright (c) 2020 Theodore R. Smith  ##
##  License: MIT                          ##

if [ -z "$1" ]; then
    echo "Error: You must specify a minimum file size (in MB)."
    exit 1
fi

FILE_SIZE=$1

if [ "$2" = "-r" ]; then
    MAXDEPTH=512
else
    MAXDEPTH=1
fi

find . -maxdepth ${MAXDEPTH} -type f -size "+${FILE_SIZE}M" -exec du -sm {} \; | sort -rnk1 | sed 's/^[0-9]\+\t*//g' 

https://github.com/hopeseekr/BashScripts/blob/master/ls-by-min

您可以通过以下方式运行它:

ls-by-min 100 [-r]

,它将列出(从大到小排列)仅当前目录中100 MB或更大的文件。传递-r使其具有递归性。