Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/shell/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Shell 如何按文件大小排序查找结果_Shell_Sorting_Find - Fatal编程技术网

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

Shell 如何按文件大小排序查找结果,shell,sorting,find,Shell,Sorting,Find,如何按文件大小对find命令的结果进行排序 我正在尝试对此“查找”命令的结果进行排序: find ./src -type f -print0 我不需要目录的大小,我只需要按大小排序的文件相对路径。以下是如何使用查找命令: find . -type f -exec ls -al {} \; | sort -k 5 -n | sed 's/ \+/\t/g' | cut -f 9 ls -lSR | sort -k 5 -n 下面是如何使用递归ls命令执行: find . -type f -e

如何按文件大小对find命令的结果进行排序

我正在尝试对此“查找”命令的结果进行排序:

find ./src -type f -print0

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

以下是如何使用
查找
命令

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

下面是如何使用递归
ls
命令执行

find . -type f -exec ls -al {} \; | sort -k 5 -n | sed 's/ \+/\t/g' | cut -f 9
ls -lSR | sort -k 5 -n
或者,如果只想显示文件名:

ls -lSR | sort -k 5 -n | sed 's/ \+/\t/g' | cut -f 9
MiB中的大小、路径是相对的。

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

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

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

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

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

警告!我不使用
-exec…\,但执行。。。{}+
。这种构造并不是只提取找到的每个文件,而是在找到所有文件时等待,然后将它们作为一个大参数列表放在一个命令中(这次是-
ls
)。
然后,
ls
正在查看文件,因为键
-S
,所以按大小排序,首先是最大的。

这些答案实际上都不起作用

这是我做的

#!/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' 

您可以通过执行以下操作来运行它:

ls-by-min 100 [-r]

它将按从大到小的顺序列出当前目录中只有100MB或更大的文件。传入
-r
使其递归。

非常好,但是
-type
选项缺少参数,因此应该是
find src-type f-printf'%s\t%p\n'| sort-n | cut-f2-