【问题标题】:List files over a specific size in current directory and all subdirectories列出当前目录和所有子目录中特定大小的文件
【发布时间】:2012-10-28 06:43:36
【问题描述】:

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

试过ls -size +10k,但没用。

【问题讨论】:

标签: linux bash unix command


【解决方案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>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}'

【讨论】:

    【解决方案4】:

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

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

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

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

    【讨论】:

    • (fwiw,我们称之为“声誉”,而不是“业力”。这不是 reddit)
    【解决方案5】:

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

    你太复杂了。

    find . -size +10k
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-11-14
      • 2012-09-02
      • 2012-02-07
      • 1970-01-01
      • 2011-03-01
      • 2017-12-04
      相关资源
      最近更新 更多