
Comecei a notar há algum tempo no Xfce4 que quando eu enviava algum arquivo para a Lixeira, o tumbler (o miniaturador do Xfce4) causava uma carga de E/S muito alta por algum tempo. Ao investigar o problema, descobri que ele estava verificando o diretório ~/.thumbnails, que era muito grande.
Então decidi escrever um script cron que limpará periodicamente o diretório ~/.thumbnails, mas há um certo diretório de arquivos de vídeo grandes para os quais o tumbler leva um pouco de tempo e às vezes até falha para criar miniaturas.
A ideia é remover todas as miniaturas, exceto as desses vídeos. Mas para manter essas miniaturas, preciso descobrir quais são seus nomes. O problema é que as miniaturas são armazenadas com o nome md5sum do URI, mais a extensão PNG.
Ao olhara fonte do copo, descobri que o nome da miniatura é gerado na seguinte linha:
md5_hash = g_compute_checksum_for_string (G_CHECKSUM_MD5, uri, -1);
Odocumentação para g-compute-checksum-for-stringdiz:
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.
Para resumir, a miniatura de um arquivo nomeado /home/teresaejunior/File 01.png
será armazenada no diretório .thumbnails/ comoa8502be3273541e618b840204479a7f9.png
De acordo comEspecificação de miniatura, URI é file://filename
. Fiz algumas pesquisas sobre o "caractere nulo" e pensei \0
que funcionaria. Para alcançar o resultado a8502be3273541e618b840204479a7f9
, acreditei que o seguinte deveria funcionar:
printf "file:///home/teresaejunior/File 01.png\0" | md5sum
mas isso retorna f507285c45d293fa66bc0b813d17b6e6
em vez disso.
Alguém pode me dar alguns conselhos? Acredito que minha printf
linha é falha. Qual é a diferença entre meu comando e g_compute_checksum_for_string
?
Responder1
O caractere NUL não é incluído quando o MD5 é calculado. Em vez disso, é o caractere de espaço que está causando o seu problema. O nome do arquivo éCodificado por URL:
$ printf '%s' 'file:///home/teresaejunior/File%2001.png' | md5sum
a8502be3273541e618b840204479a7f9 -
Aqui está uma maneira de fazer a conversão com 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