
나는 얼마 전 Xfce4에서 일부 파일을 휴지통으로 보낼 때 텀블러(Xfce4 썸네일러)가 꽤 오랫동안 매우 높은 I/O 로드를 유발한다는 사실을 알아차리기 시작했습니다. 문제를 조사한 결과 크기가 매우 큰 ~/.thumbnails 디렉터리를 스캔하고 있는 것으로 나타났습니다.
그래서 ~/.thumbnails 디렉토리를 주기적으로 정리하는 cron 스크립트를 작성하기로 결정했습니다. 그러나 텀블러가 썸네일을 생성하는 데 약간의 시간이 걸리고 때로는 실패하는 대형 비디오 파일의 특정 디렉토리가 있습니다.
아이디어는 이러한 동영상의 미리보기 이미지를 제외한 모든 미리보기 이미지를 제거하는 것입니다. 하지만 이 썸네일을 보관하려면 이름이 무엇인지 찾아야 합니다. 문제는 썸네일이 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