
Ubuntu日本語フォーラム

ログインしていません。
Ubuntu12.04でShotwellを使っています。
Shotwellはインボートした写真ファイルをPictures以下の「西暦/月/日」ディレクトリ構造に保存してくれるのですが、同じ写真ファイルが重複してコピーされています。
重複されたファイルはファイル名(拡張子を除く)末尾に「_1」のよう識別符号が付加されてファイル名が重ならないようになっています。
ファイルは重複されてもShotwellの画像物件ではそのうち一つのみが登録されています。
困ったことに、Shotwellが登録するファイルは「_1」が付加されているものと付加されていないものとの両方が混在していることです。
具体的には、Shotwell上で写真ファイルを右クリックしてファイルマネージャを開くと、Shotwellが指している写真ファイルはフォルダ中に反転表示されますが、これが「_1」がつく場合とつかない場合があります。
同じ写真が複数のファイル実体に分かれていると、Shotwell上で写真を削除・ゴミ箱空にしてもPictures以下をインポートすると復活してしまいます。
また、バックアップを取る際にも余分にストレージ容量を食います。
重複ファイルを消すには、Shotwell上で各写真について右クリックでファイルマネージャを開いて、反転しているファイル「example_1.JPG」に対して「example.JPG」や「example_2.JPG」がないか見て調べて、あったら画像も比較して重複を確認してから削除して最後にShotwellのゴミ箱を空にすればいいわけですが、とても手間がかかります。
Shotwellに登録されている画像ファイルのパスを一覧するには、Shotwellのデータベース('~/.shotwell/data/photo.db')をSQLiteライブラリで開いて"Select filename from PhotoTable"とSQL実行すればできるようですが、このようにしてプログラムを組むしかないでしょうか?
オフライン
1. Shotwellを使うならは欠点が修正された新バージョンを使うためにUbuntu14.04にグレードアップしたほうがいいです。
2. Shotwellは写真ファイルをパソコンに取り入れるとき、年月日ディレクトリに収めますが、この際に同じ名前のファイルが先に同ディレクトリに存在すると、拡張子を除いたファイル名の末尾にアンダーバーをはさんで数字を付加します。
- 取り込み時にUSBコネクタの接触不良でサイズ0のファイルができてしまった時に再度取り込むと、末尾にアンダーバー数字が付加されたファイル名になりますがサイズ0のファイルはShotwellには登録されません。
- アンダーバー数字が付けられたファイルとそうでないファイルは、どちらが新しいかは不定です。全然別の画像のこともあります。
今、Shotwellのアンダーバー数字付きファイルを探して表示して利用者が確認しながら削除するプログラムを作っています:
https://github.com/Yasukazu/ShotwellDb
Suruga による投稿:
Ubuntu12.04でShotwellを使っています。
Shotwellはインボートした写真ファイルをPictures以下の「西暦/月/日」ディレクトリ構造に保存してくれるのですが、同じ写真ファイルが重複してコピーされています。
重複されたファイルはファイル名(拡張子を除く)末尾に「_1」のよう識別符号が付加されてファイル名が重ならないようになっています。
ファイルは重複されてもShotwellの画像物件ではそのうち一つのみが登録されています。
困ったことに、Shotwellが登録するファイルは「_1」が付加されているものと付加されていないものとの両方が混在していることです。
具体的には、Shotwell上で写真ファイルを右クリックしてファイルマネージャを開くと、Shotwellが指している写真ファイルはフォルダ中に反転表示されますが、これが「_1」がつく場合とつかない場合があります。
同じ写真が複数のファイル実体に分かれていると、Shotwell上で写真を削除・ゴミ箱空にしてもPictures以下をインポートすると復活してしまいます。
また、バックアップを取る際にも余分にストレージ容量を食います。
重複ファイルを消すには、Shotwell上で各写真について右クリックでファイルマネージャを開いて、反転しているファイル「example_1.JPG」に対して「example.JPG」や「example_2.JPG」がないか見て調べて、あったら画像も比較して重複を確認してから削除して最後にShotwellのゴミ箱を空にすればいいわけですが、とても手間がかかります。
Shotwellに登録されている画像ファイルのパスを一覧するには、Shotwellのデータベース('~/.shotwell/data/photo.db')をSQLiteライブラリで開いて"Select filename from PhotoTable"とSQL実行すればできるようですが、このようにしてプログラムを組むしかないでしょうか?
オフライン
Suruga さんへ
私も写真を管理するためにShotwellをvirtualbox上のubuntu12.04で使用しております。
写真のデータ自体はWindowsのPicturesフォルダに保存してあるのですが、リンク形式でubuntuのShotwellのデータベースに取り込んで管理しています。
古くからの写真もありWindowsのPicturesフォルダ以下のサブフォルダのあちこちに重複したデータがあります。
以前に、やはり重複したデータを何とか簡単に処理できないか?と考え下記のようなサイトを見付け参考にさせて頂きました。
写真を整理し、重複を削除する
https://jp.linux.com/Linux%20Jp/tutorial/417493-tutorial20140603
重複した不要なデータがどこにあるのか見付けられれば、あとは削除するだけです。
sqlitemanなどのデータベースツールを使用して、ユーザーデレクトリ配下の /.shotwell/data/photo.db に接続し phototableの内容を直接見て必要ないものを削除しました。
ご参考になれば幸いです。
オフライン
実は私の問題とする重複写真は簡単なプログラムで検出するのは困難なのです。
コントラストを変えたり、回転させたり、トリミングしたりしてチェックサムが変わってしまっているからです。
Shotwellはデフォルト設定では方向の変更は写真に書き込まないのですが、
"Write metadata to files"/Preferences/EditをチェックONにすると書き込まれます。
原本と修正版の違いは'_1'や'_2'がファイル名(拡張子を除く)に付加されていることですが、どちらが原本かは一定しません。
ところで、Shotwellは写真ファイルはEventTableのどれかの行に所属させるようになっています。
Shotwell上で写真をライブラリから仮削除する(クリックしてDeleteキーを押す)と、該当写真に対応するPhotoTable行のevent_idカラムが-1になります。
この状態では写真はまだファイルシステム上に残っており、ナビゲーションカラム[Trash]で仮削除した写真をライブラリからのみ削除するかデスクトップのリサイクル箱に移動するかを選択する仕組みになっています。
また、Shotwellのライブラリに対応するファイルシステム上のShotwellに登録されたファイルを(Shotwell外で)削除すると、ナビ.カラム[Missing Files]に該当ファイルが出てきますが、これはサムネイルが残っているだけで実体は削除されているので無視しても問題ないのですが、たとえサムネイルといえども削除したはずのファイルが残っているのは問題であるし、復元できるわけでもないのでクリックして[Remove from Library]を実行しておくほうがいいと思います。
私はSQLiteファイルを調べるのにFireFoxアドオンの'SQLite Manager'を使っています。
お知らせいただいたLinuxツールを各種組み合わせて不要なファイルを除く方法は、私にとっては各ツール間の連携が難しいので、ライブラリとWeb情報が豊富なPython言語でプログラムを組むようになってきました。
SQL言語との組み合わせではオブジェクト-関係マッパーのsqlalchemyモジュールを使うと便利です。
bigx による投稿:
Suruga さんへ
私も写真を管理するためにShotwellをvirtualbox上のubuntu12.04で使用しております。
写真のデータ自体はWindowsのPicturesフォルダに保存してあるのですが、リンク形式でubuntuのShotwellのデータベースに取り込んで管理しています。
古くからの写真もありWindowsのPicturesフォルダ以下のサブフォルダのあちこちに重複したデータがあります。
以前に、やはり重複したデータを何とか簡単に処理できないか?と考え下記のようなサイトを見付け参考にさせて頂きました。
写真を整理し、重複を削除する
https://jp.linux.com/Linux%20Jp/tutorial/417493-tutorial20140603
重複した不要なデータがどこにあるのか見付けられれば、あとは削除するだけです。
sqlitemanなどのデータベースツールを使用して、ユーザーデレクトリ配下の /.shotwell/data/photo.db に接続し phototableの内容を直接見て必要ないものを削除しました。
ご参考になれば幸いです。
オフライン