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

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

しばらく前に、私は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を使用して変換を実行する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

おすすめ記事