쉘에서 썸네일 파일 이름을 계산하는 방법은 무엇입니까?

쉘에서 썸네일 파일 이름을 계산하는 방법은 무엇입니까?

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

관련 정보