.Jpg eşleşmesi olmayan "kullanılmayan" ham dosyaları nasıl silebilirim?


10

RAW + JPG, yani NEF ve JPG çekiyorum. Bazen yüzlerce görüntüyü (basit bir program kullanarak) izledikten ve JPG'leri sildikten sonra, gereksiz kalan birçok NEF dosyasına sahibim. Dizindeki herhangi bir yetim NEF dosyasını silmek için bir komut dosyası varsa, bu çok yararlı olacaktır. Burada benzer bir soru okudum " JPG dosyaları nasıl silinir, ancak sadece eşleşen RAW dosyası varsa? " Ve Komut İstemi ile sunulan çözüm çok iyi çalışıyor. Birinin çıkarım için uygun olup olmadığını merak ediyordum?


Bu soruya bir link verebilir misiniz? Bunun cevabı neredeyse kesinlikle bir kabuk betiği olacaktır - belki de SuperUser'a sorun, çünkü silmeniz gereken şeyin (dosya adına göre) iyi bir tanımına sahipseniz, bu oldukça önemsiz bir görevdir.
Ben Parsons

1
Gelecek için, sadece Geeqie kullanın. Eşleşen RAW dosyalarını ve yapılandırmaya dayalı olarak 'sepet' dosyası olarak tanımlanan diğer dosyaları otomatik olarak siler.
Itai

Kurulumumu aşağıdaki gibi yapıyorum: NEF: \\ Fotoğraflar \ RAW \ YYYY \ YYYY-AA-GG \ original.nef Jpegs: \\ Fotoğraflar \ RAW \ YYYY \ YYYY-AA-GG \ original.jpeg Yine de uygulayabilirim bu betiği?

Bash'te: yetim = .nef; ana = .jpeg; * "$ yetim" içindeki f için; do F = "$ {f% $ yetim} $ ebeveyn"; eğer test! -f "$ F"; sonra "Tanımlanmış yetim: $ f var ancak $ F değil"; fi done Diğer cevapların ne kadar uzun ve karmaşık olduğuna inanamıyorum. Evet, biliyorum, yorumda cevap var, ama korunuyor ...
Kimse

Yanıtlar:


9

Python'a işi benim için yapacak bir senaryo yazdım . Deniyor remove-orphaned-raw-images.pyve bunu yayınlanmış Github .

Temel olarak belirli bir klasördeki tüm dosyaları yineler ve artık ham görüntüleri (benim durumumda *.CR2eşleşen JPEG olmayan dosyalar) bir yedekleme klasörüne taşır . İsteğe bağlı olarak komut dosyasına dosyaları gerçekten silmesini söyleyebilirsiniz.

İşte algoritmanın bir özeti:

  • Seçilen dizindeki tüm dosyaların bir listesini alın.
  • Bu dosyaları RAW ve JPEG dosyalarına sıralayın (ayrı listelere ekleyin).
  • RAW resimler listesindeki her öğe için JPEG listesinde bir eşleşme olup olmadığını kontrol edin;
    değilse, bu resmi yetimsiz ham resimler listesine ekleyin.
  • Artık resimler listesindeki görüntüleri bir yedekleme klasörüne taşıyın
    (veya açıkça istenirse doğrudan silin).

Araç -h, komut satırındaki yardım seçeneğiyle çalıştırıldığında nasıl kullanılacağını size söyleyecektir .

Bu sorun da bana geldi, bu yüzden bu aracı yazdım. DSLR'mi JPEG veya RAW + JPEG görüntüler çekmek için kullanıyorum, sadece RAW kullanmıyorum. Bulanık veya kötü çekimleri sıralarken, JPEG'leri hızlıca incelemek ve kötü olanları silmek için kullanırım. Bu beni, eşleşen JPEG'leri sildiğim RAW görüntüleri ile bırakıyor (bir nedenden dolayı).


5

Bahsettiğiniz soruyu kullanarak - size bir senaryo yazdım

tamam uyarı! bu senaryoya dikkat et! - YEDEKLEME YAPMAK

1) clean.bat adında bir bat dosyası oluşturun ve çalışmak istediğiniz dizine koyun

2) Sonra yarasa dosyasına şunu girin

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) Komut istemini yönetici olarak açın ve clean.bat ile klasöre gidin 4) clean.bat çalıştırın

Temelde betiğin akışı

  • Keep adlı bir dizin oluşturun
  • Eşleşen tüm NEF dosyalarını saklama klasörüne taşıma
  • Tüm Jpeg'leri saklama klasörüne taşıma
  • Sonra kaynak klasördeki tüm dosyaları silin
  • Keep dosyalarını geri taşıma
  • Keep klasörünü kaldır

Lütfen, LÜTFEN bunu test edin!

GÜNCELLEME: İçinde boşluk olan klasörlerle çalışmak için komut dosyası değişikliği yapıldı


2
Basit, tek atışlık bir çözüm için +1! Uzun zamandır bu çözüme ihtiyacım var. DIR çıktısını excel'e yapıştırarak ve bireysel komutlar oluşturmak için vlookup gibi karmaşık operatörleri kullanarak komutları geliştirirdim, ancak bu neredeyse tüm ihtiyaçlarımı yakaladı. Senaryoyu test ettim ve benim için tamamen iyi. Komut dosyasını tam olarak anlamak ve diğer benzer işlemler için değiştirebilmek için birkaç referansa danışmak zorunda kaldım.
Jahaziel

Fantastik, bana saatlerce sıkıcı çalışma kurtardın !!! Birkaç kez denedim ve çok hızlı çalışıyor. Aradığım şey buydu.
Al H

@ al-h - lütfen doğru olarak işaretleyebilir misiniz? teşekkürler
Rob

Rob "Lütfen doğru olarak işaretleyebilir misin" ile ne demek istediğinden emin değilim Doğru bir bağlantıyı kontrol edebileceğim bir yer göremiyorum.
Al H

Fark ettiğim bir şey var. Bu, masaüstündeki klasörlerde çalışmaz (tüm jpg ve NEF dosyalarını siler), bu yüzden önce test edin. Windows XP Pro kullanıyorum.
Al H

1

İşte benim python script cr2 w / oa jpeg silmek için.

Geçerli dizinde "." Özyinelemeli olarak arama yapar. Tüm klasörlerdeki tüm görüntüleri dikkate alır.

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" yi ".nef" olarak yeniden adlandırın
Peter

Python ile aşina değilim, ama son satırda "pause.exe" anlamına gelir görüyorum. Bu sadece Windows üzerinde çalıştığı anlamına mı geliyor? Bence Python platformdan bağımsızdı.
Saaru Lindestøkke

İyi günler. Pause.exe Ben sadece koymak python thingo yürütme biter bitmez, explorer çift tıkladıktan sonra yok olmaz. Bu hattı kaldırmakta özgürsünüz ve voila platformdan bağımsız olacaktır. Os bağımlı şeyler kullanmak kötü bir uygulamadır ve başlangıçta benim için yazdığımdan beri, tembel oluyordum: D En azından naif eğik çizgilerle yolları birleştirmedim ya da os'a özgü silme dosyası işlevlerini kullanmadım.
Peter pete

Ayrıca Python 3.x sürümleri için yazılmıştır. 2.x dostu olmasını istiyorsanız sadece "bir şey" yazdırmak için tüm baskı ("bir şey") değiştirmek
Peter pete
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.