在 Windows 或 Linux 中递归搜索并删除以十六进制 00 00 FF FF 开头的文件

在 Windows 或 Linux 中递归搜索并删除以十六进制 00 00 FF FF 开头的文件

客观的:

在文件夹及其所有子文件夹中搜索前 4 个字节以十六进制序列 00 00 FF FF 开头的文件(例如:*.dat),并删除所有匹配的文件,而不在每次删除文件时提示确认

例如:

在 Linux 中,我考虑使用组合 grep + find + hexdump + rm

例如:

rm -r 递归删除匹配的文件

hexdump -n4 *.dat 提取文件的前 4 个字节

grep '\x00\x00\xFF\xFF' *.dat 查找匹配的文件返回 hexdump 00 00 FF FF

--重要--检查仅在前 4 个字节中是否有十六进制 00 00 FF FF!

文件中其他位置是否有 00 00 FF FF 并不重要!(只需检查前 4 个字节)

另外,请记住它必须扫描当前文件夹及其所有子文件夹中的所有 *.dat 文件

并且 00 00 FF FF 必须符合这个精确顺序

如果可以在 Windows 上使用,那么这是最好的解决方案(即使需要使用第三方实用程序)。但如果有一个可以在 Linux 上运行的解决方案,我会很高兴

我尝试了以下命令,但它什么也没有返回,而且我确信有以 0000FFFF 开头的 *.dat 文件

rm -r | grep '\x00\x00\xFF\xFF' | hexdump -n4 *.dat

我不知道如何通过管道传输所有必需的命令。

关于如何做到这一点有什么想法吗?

提前致谢!

答案1

像这样:

find . -type f -exec bash -c 'hexdump -n4 $1 | grep -q "^0000000 0000 ffff"' Anything {} \; -delete;

慢动作:

  • find . -type f将搜索当前目录下的所有纯文本文件
  • 对于每个文件,它将执行一行 bash 命令,hexdump -n4 $1 | grep -q "^0000000 0000 ffff"如果文件以以下内容开头,则返回 000 00 FF FF
  • find如果以 rc=0 开头的命令-exec没有返回,则跳到下一个文件,否则它将继续执行针对该文件的过滤器或操作,下一个是-delete只有前一个过滤器没有失败时才执行的。

您可以使用此功能来尝试该技术,而无需删除文件并显示其名称:

find . -type f -exec bash -c 'hexdump -n4 $1 | grep -q "^0000000 0000 ffff"' Anything {} \; -exec printf "Would delete: %s\n" {} \;

相关内容