しばらく前に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
として保存されます。
ThumbnailerSpec によると、URIはfile://filename
です。私は「ヌル文字」について調査し、\0
でうまくいくと思いました。結果a8502be3273541e618b840204479a7f9
を達成するために、私は以下が機能するはずだと信じていました。
printf "file:///home/teresaejunior/File 01.png\0" | md5sum
ただし、代わりにf507285c45d293fa66bc0b813d17b6e6
が返されます。
誰かが私にアドバイスをくれますか?私のprintf
行に欠陥があると思います。私のコマンドはg_compute_checksum_for_string
と何が違うのですか?
MD5の計算には、NUL文字は含まれません。むしろ、問題を引き起こしているのはスペース文字です。ファイル名は RLエンコード :
$ printf '%s' 'file:///home/teresaejunior/File%2001.png' | md5sum
a8502be3273541e618b840204479a7f9 -
Perlで変換を行う1つの方法は次のとおりです。
$ 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