hashdeep 出现问题,由 find 提供,以及不寻常的字符

问题描述 投票:0回答:1

我正在使用 hashdeep 来计算文件的校验和。但是,我需要排除某些目录,因此解决方案似乎是使用

find
将文件列表提供给 hashdeep。这基本上运作良好。

hashdeep -c md5 -f <(find . -type f -and -not -path '\./excludeme*')

为了测试,可以简化为:

hashdeep -c md5 -f <(find . -type f)

问题是我开始看到以不幸的方式命名的文件。例如它们的文件名中有一个回车符。我没有把它放在那里,但这不是我去修复它的地方。

我们可以使用以下方法制作这样的文件:

touch file$'\r'

hashdeep 本身就可以解决这个问题:

$ hashdeep -c md5 -r .

%%%% HASHDEEP-1.0
%%%% size,md5,filename
## Invoked from: /home/myusername/hashdeeptest
## $ hashdeep -c md5 -r .
##
0,d41d8cd98f00b204e9800998ecf8427e,/home/myusername/hashdeeptest/file

如果我使用上面的

find
调用,我会得到:

./file: No such file or directory

我怀疑有某种方法可以让

find
以一种令人满意的方式将文件名提供给
hashdeep
,但目前我无法做到。

非常感谢您提供解决方案!

find special-characters checksum
1个回答
0
投票

您面临的问题是由于

find
处理文件名中不可打印字符的方式造成的。

find
遇到名称中带有回车符(
\r
)的文件时,它将其视为一个单独的参数,导致文件名被拆分为多个部分。

要处理此问题,您可以将

-print0
选项与
find
一起使用,该选项使用空字符 (
\0
) 而不是换行符分隔文件名。然后,您可以使用
-0
选项和
hashdeep
来正确处理以 null 结尾的文件名。

这是修改后的命令:

hashdeep -c md5 -f <(find . -type f -print0) -0

此命令将正确处理包含不可打印字符(如回车符)的文件名。

© www.soinside.com 2019 - 2024. All rights reserved.