web-dev-qa-db-ja.com

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

しばらく前に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と何が違うのですか?

2
Teresa e Junior

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
4
cjm