用0x00替换给定目录中的每个字节

时间:2016-01-09 03:54:47

标签: macos bash sed byte erase

我正在尝试创建一个可以放在.bash_profile文件中的函数,该函数将用0x00替换给定目录中每个文件中的每个字节。程序将循环遍历给定目录中的所有文件$(1)循环),并在每个文件中遍历所有字节并将其替换为{{1} (替换)。

我得到了循环,但我无法弄清楚如何更换。请你帮助我好吗?如果我可以使用此功能,我可能会将其作为擦除数据的有效方法进行分发。非常感谢你的帮助!

还有一个帖子,有人想用另一个字节替换一组字节。我的不同,但也许它会使用0x00命令。

3 个答案:

答案 0 :(得分:1)

使用dd

hd targetfile # optionally look at hex dump to see original file contents

SIZE=$(stat -f%z targetfile) # get file size
dd if=/dev/zero of=targetfile count=1 bs="$SIZE" # overwrite file contents

hd targetfile # optionally look at hex dump to see it's all zeros

注意,在Linux上, stat 的文件大小开关将是-c%s,我测试过它。以上-f%z基于this answer,我没有对其进行测试。

在使用 dd 之前,您可能还需要为 stat 添加返回值检查并验证文件大小是否大于零。类似的东西:

SIZE=$(stat -f%z targetfile) &&
test "$SIZE" -gt 0 &&
dd if=/dev/zero of=targetfile count=1 bs="$SIZE"

答案 1 :(得分:0)

sed -i "s/./\x00/g;" file # sets any char to 0 except returns

无论如何,类似的方法可能会创建相同名称的文件,相同的大小用零填充,但不确定,如果这些文件在光盘上占据的空间与原件相同,那么原件的字节可能是可能的稍后在“文件之间的空闲空间”中找到

正确的方法是使用更复杂的东西,或者是用于重写扇区内容的专用工具,或者至少是以二进制模式打开文件并用零覆盖每个字节的程序。

仍然可能有光盘上某处隐藏的那些“秘密字节”,如果这些文件在某种程度上被操纵(编辑,复制,......)所以为了摆脱“证据”,你还需要重写所有“未被占用的”光盘上的空间

并且希望,有些扇区的重新映射已经发生(因为硬盘可以自动映射出有缺陷的扇区,后来可以恢复这些扇区,并且SSD也会通过耗损均衡和重新映射扇区来做一些肮脏的技巧)

所以你仍然需要考虑价格和风险。好老白蚁是这里的银弹:)

答案 2 :(得分:0)

如果您需要更改某个目录后面的所有文件,find + dd是可行的方法。以下脚本应该可以解决问题。

关于Darwin(OSX)的

注意:您需要从hyde已经指出的stat -c%s更改为stat -f%z

#!/bin/bash
[ ! -d "$1" ] && echo "Usage: $0 <directory>" && exit 1
find "$1" -type f ! -empty | while read f; do
  dd if=/dev/zero of="$f" count=1 bs=`stat -c%s "$f"` > /dev/null 2>&1 || echo "$f failed"
done