不久前我开始注意到,在 Xfce4 中,当我将一些文件发送到垃圾箱时,tumbler(Xfce4 缩略图器)会在相当长的一段时间内导致非常高的 I/O 负载。在调查该问题后,我发现它正在扫描 ~/.thumbnails 目录,该目录非常大。
所以我决定编写一个 cron 脚本来定期清理 ~/.thumbnails 目录,但是有一个特定的大型视频文件目录,tumbler 需要花费一些时间,有时甚至会失败,才能为其创建缩略图。
这个想法是删除所有缩略图,除了这些视频的缩略图。但为了保留这些缩略图,我必须找到它们的名字。问题是缩略图存储时使用 URI 的 md5sum 以及 PNG 扩展名进行命名。
看完之后不倒翁来源,我发现缩略图的名称是在以下行中生成的:
md5_hash = g_compute_checksum_for_string (G_CHECKSUM_MD5, uri, -1);
这g-compute-checksum-for-string 的文档说:
g_compute_checksum_for_string(GChecksumType checksum_type,
const gchar *str,
gssize length);
checksum_type: a GChecksumType
str: the string to compute the checksum of
length: the length of the string, or -1 if the string is null-terminated.
简而言之,名为的文件的缩略图/home/teresaejunior/File 01.png
将存储在 .thumbnails/ 目录中,如下所示a8502be3273541e618b840204479a7f9.png
根据缩略图规格,URI 是file://filename
。我对“空字符”做了一些研究,认为\0
可以解决问题。为了达到这个结果a8502be3273541e618b840204479a7f9
,我相信以下应该起作用:
printf "file:///home/teresaejunior/File 01.png\0" | md5sum
但这f507285c45d293fa66bc0b813d17b6e6
反而返回了。
有人可以给我一些建议吗?我相信我的printf
路线有缺陷。我的命令与 有何不同g_compute_checksum_for_string
?
答案1
计算MD5时不包含NUL字符。相反,是空格字符导致了您的问题。文件名是URL编码:
$ printf '%s' 'file:///home/teresaejunior/File%2001.png' | md5sum
a8502be3273541e618b840204479a7f9 -
以下是使用 Perl 进行转换的一种方法:
$ perl -MURI::file -MDigest::MD5=md5_hex \
-e 'printf "%s.png\n", md5_hex(URI::file->new(shift))' \
'/home/teresaejunior/File 01.png'
a8502be3273541e618b840204479a7f9.png