.jpgが一致しない「未使用」のrawファイルを削除するにはどうすればよいですか?


10

RAW + JPG、つまりNEFとJPGを撮影します。(単純なプログラムを使用して)何百もの画像を表示し、JPGを削除した後、不要な残りのNEFファイルがたくさんあります。ディレクトリ内の孤立したNEFファイルを削除するスクリプトがあった場合、それは非常に役立ちます。「JPGファイルを削除する方法は同じですが、一致するRAWファイルが存在する場合にのみ」という同様の質問をここで読んだところ、コマンドプロンプトで表示されるソリューションは非常にうまく機能しました。私の苦境に利用できるものがあるのだろうか?


ここにその質問へのリンクを提供できますか?これに対する答えはほぼ間違いなくシェルスクリプトです-削除する必要があるものを(ファイル名で)明確に定義している場合、これはかなり簡単なタスクであるため、代わりにSuperUserに尋ねます。
ベンパーソンズ

1
今後はGeeqieを使用してください。一致するRAWファイルと、設定に基づいて「サイドカー」ファイルとして定義されているその他のファイルを自動的に削除します。
板井

私は次のように設定しています:NEF:\\ Photos \ RAW \ YYYY \ YYYY-MM-DD \ original.nef Jpegs:\\ Photos \ RAW \ YYYY \ YYYY-MM-DD \ original.jpegとにかくこれを適用できますこれへのスクリプト?

Bashの場合:orphan = .nef; parent = .jpeg; * "$ orphan"のfの場合; F = "$ {f%$ orphan} $ parent"; テストなら!-f "$ F"; 次に、「識別された孤立:$ fは存在するが$ Fは存在しない」とエコーします。fi done他の回答がどれほど長く複雑であるかは信じられません。ええ、私はコメントで回答しますが、それは保護されています...
誰も

回答:


9

私はPythonでスクリプトを書いて、私のために仕事をしました。それが呼ばれremove-orphaned-raw-images.py、私はそれをGithubに公開しました

基本的には、指定されたフォルダー内のすべてのファイルを反復処理し、孤立した生画像(私の場合*.CR2、一致するJPEGがないファイル)をバックアップフォルダーに移動します。オプションで、実際にファイルを削除するようにスクリプトに指示できます。

アルゴリズムの概要は次のとおりです。

  • 選択したディレクトリ内のすべてのファイルのリストを取得します。
  • それらのファイルをRAWファイルとJPEGファイルに分類します(別のリストに追加します)。
  • RAW画像リストの各アイテムがJPEGリストに一致することを確認します。
    そうでない場合は、孤立したrawイメージのリストにこのイメージを追加します。
  • 孤立したイメージのリストにあるイメージをバックアップフォルダーに移動します
    (または、明示的に必要な場合は直接削除します)。

ツールは-h、コマンドラインでヘルプオプションを指定して実行すると、その使用方法を教えてくれます。

この問題は私にも発生したので、このツールを作成しました。私はDSLRを使用してJPEGまたはRAW + JPEG画像を撮影しています。RAWだけではありません。ぼやけたショットやその他の悪いショットを整理するときは、JPEGを使用してすばやく確認し、悪いショットを削除します。これにより、残ったRAW画像が残りますが、その理由は(理由により)一致するJPEGを削除したものです。


5

あなたが言及した質問を使用して-私はあなたにスクリプトを書きました

わかりました警告!このスクリプトには注意してください!-バックアップを作成

1)clean.batというbatファイルを作成し、作業したいディレクトリに配置します

2)次に、batファイルに次のように入力します

mkdir keep
for /f "delims==" %%r in ('dir /b *.jpg') do move "%%~dpr%%~nr.nef" "%CD%\keep\" 2> nul
move *.jpg "%CD%\keep\"
del *.nef
del *.jpg
move "%CD%\keep\*.*" "%CD%\"
rmdir keep

3)コマンドプロンプトを管理者として開き、clean.batのあるフォルダーに移動します。4)clean.batを実行します。

基本的にスクリプトの流れは

  • Keepというディレクトリを作成します
  • 一致するすべてのNEFファイルをkeepフォルダーに移動します
  • すべてのJpegsをkeepフォルダーに移動します
  • 次に、ソースフォルダからすべてのファイルを削除します
  • 保持ファイルを戻す
  • 保存フォルダを削除する

これをテストしてください!

更新:スペースが含まれているフォルダで機能するようにスクリプトを変更しました


2
+1の簡単なワンショットソリューション!私は長い間このソリューションを必要としてきました。私はDIR出力をExcelに貼り付け、vlookupなどの複雑な演算子を使用して個々のコマンドを生成することでコマンドを詳しく説明していましたが、これでほぼすべてのニーズをキャッチできます。スクリプトをテストしましたが、そのスクリプトは完全に問題ありません。スクリプトを完全に理解し、他の同様の操作のために変更できるようにするには、いくつかのリファレンスを参照する必要がありました。
Jahaziel 2012

素晴らしい、面倒な作業の時間を節約してくれました!!! 何度か試してみましたが、速すぎます。それはまさに私が探していたものです。
Al H

@ al-h-では、正しいものにチェックを付けてください。感謝
Rob

ロブ「正しいものにチェックを入れてください」という意味がわかりません。正しいリンクをチェックできるところがどこにもありません。
Al H

私が気づいたことの1つ。これはデスクトップ上のフォルダーでは機能しません(すべてのjpgおよびNEFファイルを削除します)ので、最初にテストしてください。Windows XP Proを実行しています。
Al H

1

これがcr2のw / oa jpegを削除する私のpythonスクリプトです。

現在のディレクトリ「。」内を再帰的に検索します。すべてのフォルダ内のすべての画像が考慮されます。

import os 
import sys

#Searches through the current directory, recursively, looking for any raw
#and jpeg files. It enumerates the jpegs it finds, without the extension, and
#then enumerates the raw files it finds. If it finds a raw file for which no
#jpeg exists, then it deletes the raw file.
#
# This WILL NOT WORK, if there are files with repeated file numbers.
# this will NOT be an issue if there's only one camera. 

# A dict of filename: (rawpath, jpegpath)
files_seen = {}

for (cur_dir, subdirs, files) in os.walk("."):
  for file in files:
    fname, fext = os.path.splitext(file)
    fext = fext.lower()



    if (fext == ".jpg"):
      content = files_seen.setdefault(fname, [None, None])
      # if it is then filenames have du'ped
      assert(content[1] is None)
      content[1] = os.path.join(cur_dir, file)

    elif (fext == ".cr2"):
      content = files_seen.setdefault(fname, [None, None])
      assert(content[0] is None)
      content[0] = os.path.join(cur_dir, file)

#at the end, we look for raw files without a jpeg,

for key in files_seen:
  (raw_path, jpeg_path) = files_seen[key]

  if jpeg_path is None:
    print("Deleting: %s" % raw_path)
    #os.system("pause.exe")    
    os.unlink(raw_path)

print("Done")
os.system("pause.exe")

「.cr2」の名前を「.nef」に変更するだけ
Peter pete

私はPythonに精通していませんが、最終行の「pause.exe」を参照しているようです。これはWindowsでのみ機能するということですか?Pythonはプラットフォームに依存していませんでしたが。
SaaruLindestøkke2013年

グデー。エクスプローラーでダブルクリックした後、実行が終了してもすぐにpythonのものが消えないように、私が入れたpause.exeだけです。あなたはこのラインを自由に削除でき、それはプラットフォームに依存しなくなります。OSに依存するものを使用することは悪い習慣であり、私が最初にそれを書いたので、私は怠惰でした:D少なくともパスを単純なスラッシュで連結したり、OS固有のファイル削除関数を使用したりしませんでした。
ピーターピート2013年

また、Python 3.xバージョン用に書かれています。2.x対応にする場合は、すべてのprint( "something")を変更して、 "something"を印刷します
Peter pete
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.