얼마 전 저는 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