列出当前目录和所有子目录中特定大小的文件

时间:2012-11-08 05:07:45

标签: linux bash unix command

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

尝试ls -size +10k,但这没有用。

5 个答案:

答案 0 :(得分:68)

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

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

实际上\;会重复或:

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选择lsls -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按大小对文件进行排序,并且无需排序。但要找到最大的文件,你需要使用头部

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

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

答案 1 :(得分:11)

尝试这样做:

find . -size +10k -ls

如果你想使用二进制ls

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

答案 2 :(得分:8)

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

你太复杂了。

[(0, 1, 2), (0, 1, 3), (0, 1, 4), (0, 2, 3), (0, 2, 4), (0, 3, 4),(1,2, 3), (1, 2, 4), (1, 3, 4), (2, 3, 4)]

答案 3 :(得分:4)

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

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

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

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

答案 4 :(得分:1)

你可以这样使用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}'