找不到任何方法来搜索包含 100% NULL 的文件?

找不到任何方法来搜索包含 100% NULL 的文件?

我丢失了桌面文件夹(里面有很多东西……可能有 1000 个文件)。然后使用工具立即恢复了已删除的文件。我找到了所有已删除的文件并恢复了它们。它们的日期和大小等看起来都正常……因此,我将它们复制回桌面文件夹,结果发现里面的每一个都是 100% NUL。我认为它们甚至没有任何回车符。只有一长串空值。但文件的大小是正确的。所以……

幸运的是,我有一个半月前的旧备份,能够恢复大约 80% 的文件。

但是现在我有 20% 的文件,充满了 NULL,散布在整个桌面和桌面上的文件夹中。

我不懂 Python,也找不到任何工具来识别这些文件。没有人制作工具来查找 100% 充满 NUL 00 字符的文件,这对我来说似乎很疯狂???我现在 61 岁,退休了,但我曾经是一名软件开发人员,我不想只为了做这件事而学习一门语言。这似乎是一个让某人制作一个工具来分享的机会。我尝试过使用正则表达式搜索的 grepWin,并搜索了所有地方,但我发现很多人都在尝试做同样的事情,但都失败了。

我有一些示例 NUL 文件要测试。我找不到任何可以上传它们的方法。

答案1

谢谢 Paul。出于某种原因,我无法对您的回答发表评论。上面说我“必须有 50 点声誉才能发表评论”。也许是因为我的问题是从 Unix 论坛迁移过来的?我不知道……

您的回复是 grep 命令吗?如果是,我还需要一些基本指导。我搜索了又搜索,尝试了 grepWin(我无法找到 100% 空文件),下载了 grep3.4(但没有命令起作用?也许它需要设置系统路径?,IDK),并找到了 GnuWin(我不认为这是我想要的,因为它似乎仅适用于 32 位系统,而我在 Win 10 64 中)... 我也搜索了初学者教程,但没有一个教程展示如何设置 Grep 来工作。它们都开始向您展示基本命令...

再次感谢您的回复。我讨厌麻烦您。任何帮助我都非常感谢,因为我已经花了大约 5 天时间试图解决这个问题。现在感觉自己很愚蠢。

答案2

抱歉回复晚了——由于我是以访客身份发表评论,因此我没有收到您的回答的通知。

这是一个经过测试的脚本,可能需要稍加调整。

#! /bin/bash

    find 2>/dev/null . -type f -size +0c | while IFS= read -r fn; do
        NN="$( head --bytes=128 "${fn}" | tr -d '\0' | wc -c )"
        (( NN > 0 )) && continue

        NN="$( tr -d '\0' < "${fn}" | wc -c )"
        (( NN > 0 )) && continue

        printf "rm -f '%s'\n" "${fn}"
    done

按照编写的方式,它会创建一个命令列表,用于删除目录树中所有完全为 NUL 字符的文件。您可以将该列表重定向到一个文件中进行检查,然后只需。或者,您也可以直接在 done 之后bash < myRmFile放置 。| bash

外循环find ...; do ... done从运行它的地方递归搜索目录。 find 选项仅选择大小至少为 1 个字节的常规文件,然后我们一次将名称读入变量 fn。

接下来的两行是预检查优化器,用于节省读取每个文件的全部内容的时间。它只检查前 128 个字节,因为任何像样的文件都不会有 128 个 NUL 字节,然后再检查其他内容。

因此,我们从三个命令的管道中为 NN 分配一个计数。 挑选head出前 128 个字节, 删除tr每个 NUL, 然后wc -c计数剩余的字节。 如果还有任何非 NUL 字节,我们将继续处理下一个文件名。

接下来的两行执行相同的操作,但是针对整个文件,以防我们遇到“不合适的”文件。

如果这两项检查均未通过,则会为该文件生成 rm 指令。

对于某些极端文件名(名称中包含单引号或换行符),这有点不可靠。它会对每个文件运行一个 rm 进程,但您似乎只有大约 200 个文件,所以这并不重要。

如果有问题,请再发帖。

相关内容