Como calcular um nome de arquivo de miniatura do shell?

2

Eu comecei a perceber há algum tempo no Xfce4 que quando eu enviava algum arquivo para o Lixo, o tumbler (o thumbnailer do Xfce4) causava uma carga de E / S muito alta por algum tempo. Ao investigar o problema, descobri que ele estava digitalizando o diretório ~ / .thumbnails, que era muito grande em tamanho.

Então eu decidi escrever um script cron que limparia periodicamente o diretório ~ / .thumbnails, mas há um certo diretório de arquivos de vídeo grandes que o tumbler leva um pouco de tempo, e às vezes até falha, para criar miniaturas.

A ideia é remover todas as miniaturas, exceto aquelas para esses vídeos. Mas, para manter essas miniaturas, preciso descobrir quais são seus nomes. O problema é que as miniaturas são armazenadas nomeadas com um md5sum do URI, além da extensão PNG.

Ao olhar para a fonte tumbler , eu encontrei o nome para a miniatura é gerado na seguinte linha:

md5_hash = g_compute_checksum_for_string (G_CHECKSUM_MD5, uri, -1);

A documentação para g-compute-checksum- for-string diz:

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 chamado /home/teresaejunior/File 01.png será armazenada no diretório .thumbnails / como a8502be3273541e618b840204479a7f9.png

De acordo com o ThumbnailerSpec , o URI é file://filename . Eu fiz algumas pesquisas sobre o "caractere nulo", e pensei que a8502be3273541e618b840204479a7f9 faria o truque. Para alcançar o resultado f507285c45d293fa66bc0b813d17b6e6 , acreditei que o seguinte deveria funcionar:

printf "file:///home/teresaejunior/File 01.png
md5_hash = g_compute_checksum_for_string (G_CHECKSUM_MD5, uri, -1);
" | md5sum

mas que retorna printf .

Alguém pode me dar algum conselho? Eu acredito que minha linha g_compute_checksum_for_string é falha. Qual é o meu comando diferente de %code% ?

    
por Teresa e Junior 19.09.2013 / 03:41

1 resposta

4

O caractere NUL não é incluído quando o MD5 é calculado. Pelo contrário, é o personagem do 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 o 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
    
por 19.09.2013 / 05:46