我丢失了桌面文件夹(里面有很多东西……可能有 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 个文件,所以这并不重要。
如果有问题,请再发帖。