如何按文件大小排序find命令的结果?
我尝试对此find命令的结果进行排序:
find ./src -type f -print0
我不想要目录的大小,我需要按大小排序的文件相对路径。
答案 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
使其具有递归性。