シェルからサムネイルファイル名を計算する方法は?

シェルからサムネイルファイル名を計算する方法は?

しばらく前から、Xfce4 でファイルをゴミ箱に送ると、Tumbler (Xfce4 サムネイル作成ツール) が長時間にわたって非常に高い I/O 負荷を引き起こすことに気付きました。この問題を調査してみると、サイズが非常に大きい ~/.thumbnails ディレクトリをスキャンしていることがわかりました。

そこで、定期的に ~/.thumbnails ディレクトリをクリーンアップする cron スクリプトを作成することにしましたが、大きなビデオ ファイルのディレクトリがいくつかあり、Tumbler ではサムネイルの作成に少し時間がかかり、場合によっては失敗することもあります。

アイデアとしては、これらのビデオのサムネイルを除くすべてのサムネイルを削除することです。しかし、これらのサムネイルを保持するには、その名前を見つける必要があります。問題は、サムネイルが 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 で変換を行う方法の 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

関連情報