【问题标题】:Bash script to filter out files based on size用于根据大小过滤掉文件的 Bash 脚本
【发布时间】:2017-04-29 04:05:48
【问题描述】:

我有很多日志文件都是唯一的文件名,但是根据大小,许多都是完全相同的内容(机器人生成的攻击)。

我需要过滤掉重复的文件大小或只包含唯一的文件大小。 95% 不是唯一的,我可以看到文件大小,因此可以手动选择大小以过滤掉。

我已经解决了

find . -size 48c | xargs ls -lSr -h

只会给我 48 字节的日志,并且可以继续使用这种方法来创建一长串包含的文件

uniq 不支持文件大小,据我所知

find 确实有一个not 选项,这可能是我应该看的地方吗?

如何有效地过滤掉已知的重复项?

或者是否有其他方法可以仅根据唯一大小过滤和显示日志。

【问题讨论】:

  • 您知道文件大小,还是只想查找大小相同的文件并排除它们?
  • 测试,! 操作符与notfind 一样有效,并且可以手动排除文件。
  • Benjamin W,我想做后者,虽然我可以手动识别文件大小,有 48000 条日志,所以“查找大小相同的文件并排除”是我的目标

标签: bash shell logging filtering uniq


【解决方案1】:

一种解决方案是:

find . -type f -ls | awk '!x[$7]++ {print $11}'

$7 是文件大小列; $11 是路径名。 由于您使用的是find,因此我假设存在您不想列出的子目录。

awk 部分打印具有给定大小的第一个文件的路径(仅)。 高温

【讨论】:

  • 但是 OP 想要所有没有其他相同大小文件的文件。
  • 这个好像很接近了,我把这个加到最后| xargs ls -lSr -h看文件大小,这个位置没有子目录。
  • 这不起作用的最小示例:两个大小相同的文件;它会返回一个,但它应该不返回一个。
【解决方案2】:

您几乎拥有它,这样做是否提供了解决方案:

find . -size 48c | xargs

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-01-26
    • 2020-11-02
    • 1970-01-01
    • 2020-02-15
    • 1970-01-01
    • 2018-01-18
    • 1970-01-01
    相关资源
    最近更新 更多