列出当前目录和所有子目录中特定大小的文件
Posted
技术标签:
【中文标题】列出当前目录和所有子目录中特定大小的文件【英文标题】:List files over a specific size in current directory and all subdirectories 【发布时间】:2012-10-28 06:43:36 【问题描述】:如何在当前目录及其子目录中显示所有大于 10k 字节的文件。
试过ls -size +10k
,但没用。
【问题讨论】:
能否请您扩展一下这个问题,或者至少解释一下为什么发布的两个解决方案 - 并且有效,不适合您的任务。 (编辑:请添加)ls
没有任何按大小过滤输出的选项。它确实有一个--size
选项(不带参数),它以块为单位打印每个文件的大小。顺便说一句,-size +10k
似乎是与find
一起使用的语法。
Stack Overflow 是一个编程和开发问题的网站。这个问题似乎离题了,因为它与编程或开发无关。请参阅帮助中心的What topics can I ask about here。也许Super User 或Unix & Linux Stack Exchange 会是一个更好的提问地方。另见Where do I post questions about Dev Ops?
How can I find files that are bigger/smaller than x bytes? 超级用户。
【参考方案1】:
尝试这样做:
find . -size +10k -ls
如果你想使用二进制ls
:
find . -size +10k -exec ls -l \;
【讨论】:
我想用 ls not find 显示它们。ls -l . -size +10k
无效。
还是不行,这是作业。 “你的当前目录是 dir。显示 dir(及其子目录)中所有大于 10k 字节的文件。”
我不明白你。我的建议正是您所要求的。
我同意,斯普特尼克,他会追求什么。向您 +1,因为我的回答是您自己的修改。我以前从未使用带有 -ls 选项的 find,但我经常发现自己使用带有 size 或 mtime 的 find
。
在我的帖子中添加了 ls 二进制版本。【参考方案2】:
find . -size +10k -exec ls -lh \+
第一部分与@sputnicks 答案相同,并成功找到目录中超过 10k 的所有文件(不要将 k 与 K 混淆),我的补充是,第二部分然后执行 ls -lh
或 ls 列出(-l) 人类可读大小的文件 (-h)。如果您愿意,请否定 h。当然 是文件本身,
\+
只是\;
的替代品
实际上\;
会重复或:
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
最后,你的标题说 find biggest file in directory。然后你可以通过管道将代码传递给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
【讨论】:
我在一个没有子目录的目录上试过这个,它完美地工作。让我在另一个目录上试试这个。 h/o --find
是你所追求的,顺便说一句。
好的,我在另一个目录上试过了。这就是你所追求的。你能解释为什么这绝对不是这个吗?
这是因为在这个作业中我们应该输入一个命令。如果命令正确,我将被带到作业的下一部分。
其实这个答案是正确的。我忘了我们在本课程中介绍了 find 命令,所以我们可以使用它。答案是find . -size +10k
。非常感谢您的详细回答,我真的很感激。
这个答案令人困惑,因为find . -size +10k -exec ls -lh \+
返回所有文件,而不仅仅是超过 10k 的文件【参考方案3】:
你可以这样使用ls:
ls -lR | egrep -v '^d' | awk '$5>10240print'
解释:
ls -lR # list recursivly
egrep -v '^d' # only print lines which do not start with a 'd'. (files)
仅打印第五列(大小)大于 10240 字节的行:
awk '$5>10240print'
【讨论】:
【参考方案4】:我将添加到@matchew 答案(没有足够的业力点来评论):
find . -size +10k -type f -maxdepth 1 -exec ls -lh \; > myLogFile.txt
-type f :指定常规文件类型
-maxdepth 1 :确保只查找当前目录中的文件
【讨论】:
(fwiw,我们称之为“声誉”,而不是“业力”。这不是 reddit)【参考方案5】:我意识到这项任务可能早就结束了。对于其他人:
你太复杂了。
find . -size +10k
【讨论】:
以上是关于列出当前目录和所有子目录中特定大小的文件的主要内容,如果未能解决你的问题,请参考以下文章