44

如何在当前目录及其子目录中显示所有大于 10k 字节的文件。

试过ls -size +10k了,但没有奏效。

4

5 回答 5

74

find . -size +10k -exec ls -lh {} \+

第一部分与@sputnicks 答案相同,并成功找到目录中超过 10k 的所有文件(不要将 k 与 K 混淆),我的补充是,第二部分然后执行ls -lh或 ls 列出(-l)文件按人类可读大小(-h)。如果您愿意,请否定 h。当然 the{}是文件本身,而 the\+只是替代\;

在实践中\;会重复或:

ls -l found.file; ls -l found.file.2; ls -l found.file.3

将其\+显示为一个语句或:

ls -l found.file found.file.2 found.file.3

更多关于\; vs +find

另外,您可能希望列表按尺寸排序。这是相对容易实现的。我可以-s选择ls, 所以ls -ls然后通过管道将其sort -n以数字方式排序

这将成为:

find . -size +10k -exec ls -ls {} \+ | sort -n

或以相反的顺序添加 -r :

find . -size +10k -exec ls -ls {} \+ | sort -nr

最后,你的标题说在目录中找到最大的文件。您可以通过将代码管道传输到tail

find . -size +10k -exec ls -ls {} \+ | sort -n | tail -1 会在目录及其子目录中找到最大的文件。

请注意,您还可以使用 -S 按大小对文件进行排序,并且不需要排序。但是要找到最大的文件,您需要使用 head 所以

find . -size +10k -exec ls -lS {} \+ | head -1

使用 -S 而不是这样做的好处sort是一,您不必键入sort -n,二您还可以使用-h人类可读的大小选项。这是我最喜欢使用的一种,但不适用于旧版本的ls,例如我们有一个旧的 centOs 4 服务器在工作-h

于 2012-11-08T05:13:42.680 回答
15

尝试这样做:

find . -size +10k -ls

如果你想使用二进制ls

find . -size +10k -exec ls -l {} \;
于 2012-11-08T05:09:34.533 回答
9

我意识到这项任务可能早就结束了。对于其他任何人:

你太复杂了。

find . -size +10k
于 2016-07-10T16:38:07.240 回答
4

我将添加到@matchew 答案(没有足够的业力点来评论):

find . -size +10k -type f -maxdepth 1 -exec ls -lh {} \; > myLogFile.txt

-type f :指定常规文件类型

-maxdepth 1 :确保它只查找当前目录中的文件

于 2014-10-09T18:59:07.163 回答
3

你可以这样使用ls

ls -lR | egrep -v '^d' | awk '$5>10240{print}'

解释:

ls -lR         # list recursivly
egrep -v '^d'  # only print lines which do not start with a 'd'. (files)

仅打印第五列(大小)大于 10240 字节的行:

awk '$5>10240{print}'
于 2012-11-08T08:19:07.850 回答