Shell 如何按文件大小排序查找结果
如何按文件大小对find命令的结果进行排序 我正在尝试对此“查找”命令的结果进行排序: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 ./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-