Bagaimana cara menghapus file mentah "tidak terpakai" yang tidak cocok dengan .jpg?

10

Saya memotret RAW + JPG, yaitu NEF dan JPG. Setelah terkadang melihat ratusan gambar (menggunakan program sederhana) dan menghapus JPG, saya memiliki banyak file NEF yang tidak perlu. Jika ada skrip untuk menghapus file NEF anak yatim di direktori, itu akan sangat membantu. Saya membaca pertanyaan serupa di sini " Bagaimana cara menghapus file JPG, tetapi hanya jika file RAW yang cocok ada? " Dan solusi yang disajikan dengan Command Prompt bekerja dengan sangat baik. Saya bertanya-tanya apakah ada yang tersedia untuk kesulitan saya?

Al H
sumber
Bisakah Anda memberikan tautan ke pertanyaan itu di sini? Jawabannya hampir pasti berupa skrip shell - mungkin malah bertanya pada SuperUser, karena jika Anda memiliki definisi yang baik tentang apa yang perlu Anda hapus (dengan nama file), ini adalah tugas yang cukup sepele.
Ben Parsons
1
Untuk masa depan, gunakan saja Geeqie. Ini menghapus file RAW yang cocok secara otomatis dan yang lainnya yang didefinisikan sebagai file 'sespan' berdasarkan konfigurasi.
Itai
Saya memiliki pengaturan sebagai berikut: NEF: \\ Photos \ RAW \ YYYY \ YYYY-MM-DD \ original.nef Jpegs: \\ Photos \ RAW \ YYYY \ YYYY-MM-DD \ original.jpeg Lagi pula saya dapat menerapkan ini skrip untuk ini?
Dalam Bash: orphan = .nef; parent = .jpeg; untuk f di * "$ yatim piatu"; do F = "$ {f% $ yatim piatu} $ parent"; jika tes! -f "$ F"; lalu gema "Identifikasi anak yatim: $ f ada tetapi bukan $ F"; Sudah selesai. Tidak bisa percaya, berapa lama dan rumit jawaban-jawaban lain itu. Ya, saya tahu, menjawab dalam komentar, tetapi dilindungi ...
Tidak ada yang

Jawaban:

9

Saya menulis skrip dengan Python untuk melakukan pekerjaan untuk saya. Itu disebut remove-orphaned-raw-images.pydan saya menerbitkannya di Github .

Pada dasarnya ini beralih ke semua file dalam folder yang diberikan dan memindahkan gambar mentah yatim (dalam *.CR2file kasus saya tanpa JPEG yang cocok) ke folder cadangan. Secara opsional Anda dapat memberitahu skrip untuk benar-benar menghapus file.

Berikut ini adalah garis besar algoritma:

  • Dapatkan daftar semua file di direktori yang dipilih.
  • Urutkan file-file itu ke file RAW dan JPEG (tambahkan ke daftar terpisah)
  • Periksa setiap item dalam daftar gambar RAW bahwa ada kecocokan dalam daftar JPEG;
    jika tidak, tambahkan gambar ini ke daftar gambar mentah yatim piatu.
  • Pindahkan gambar dalam daftar gambar yatim ke folder cadangan
    (atau langsung menghapusnya jika diinginkan secara eksplisit).

Alat ini akan memberi tahu Anda cara menggunakannya saat dijalankan dengan opsi bantuan -hpada baris perintah.

Masalah ini juga terjadi pada saya, itulah sebabnya saya menulis alat ini. Saya menggunakan DSLR saya untuk mengambil gambar JPEG atau RAW + JPEG, tidak pernah hanya RAW. Saat memilah gambar yang buram atau buruk, saya menggunakan JPEG untuk dengan cepat melihatnya dan menghapus yang buruk. Ini membuat saya dengan sisa gambar RAW yang saya hapus JPEG yang cocok (karena suatu alasan).

pklaus
sumber
5

Menggunakan pertanyaan yang Anda sebutkan - saya telah menulis naskah untuk Anda

peringatan ok! hati-hati dengan skrip ini! - MEMBUAT CADANGAN

1) Buat file kelelawar bernama clean.bat dan letakkan di dir yang ingin Anda gunakan

2) Kemudian masukkan berikut ini ke file 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) Buka prompt perintah sebagai admin dan arahkan ke folder dengan clean.bat 4) jalankan clean.bat

Pada dasarnya alur naskahnya adalah

  • Buat direktori bernama Keep
  • Pindahkan semua file NEF yang cocok ke folder keep
  • Pindahkan semua Jpeg ke folder keep
  • Kemudian hapus semua file dari folder sumber
  • Pindahkan file yang disimpan kembali
  • Hapus folder simpan

Tolong, Tolong uji ini!

PEMBARUAN: Membuat perubahan skrip untuk bekerja dengan folder yang memiliki spasi di dalamnya

rampok
sumber
2
+1 untuk solusi langsung, sekali tembak! Saya sudah membutuhkan solusi ini untuk waktu yang lama. Saya biasa mengelaborasi perintah dengan menempelkan output DIR ke excel, dan menggunakan operator yang rumit seperti vlookup untuk menghasilkan perintah individual, tetapi ini menangkap hampir semua kebutuhan saya. Menguji skrip dan sepenuhnya baik untuk saya. Harus berkonsultasi dengan beberapa referensi untuk sepenuhnya memahami skrip dan dapat memodifikasinya untuk operasi serupa lainnya.
Jahaziel
Fantastis, Anda telah menyelamatkan saya berjam-jam dari pekerjaan yang membosankan !!! Saya mencobanya beberapa kali dan ini bekerja terlalu cepat. Itu hanya apa yang saya cari.
Al H
@ al-h - bisakah Anda mencentang sebagai benar? terima kasih
Rob
Rob Saya tidak yakin apa yang Anda maksud dengan "tolong beri Anda centang sebagai benar" Saya tidak melihat suatu tempat saya dapat memeriksa tautan yang benar.
Al H
Satu hal yang saya perhatikan. Ini tidak berfungsi pada folder di desktop (menghapus semua file jpg & NEF), jadi uji dulu. Saya menjalankan Windows XP Pro.
Al H
1

Inilah skrip python saya untuk menghapus cr2's w / oa jpeg.

Itu mencari secara rekursif dalam direktori saat ini, "." Ini mempertimbangkan semua gambar di semua folder.

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")
Peter pete
sumber
Ubah nama ".cr2" menjadi ".nef"
Peter pete
Saya tidak terbiasa dengan Python, tetapi saya melihatnya mengacu pada "pause.exe" di baris terakhir. Apakah ini berarti hanya berfungsi di Windows? Saya pikir Python adalah platform independen.
Saaru Lindestøkke
Gday. The pause.exe saya hanya memasukkan sehingga halo python tidak lenyap begitu selesai dieksekusi, setelah saya klik dua kali pada explorer. Anda bebas untuk menghapus garis ini dan voila itu akan menjadi platform independen. Menggunakan hal-hal yang tergantung pada os adalah praktik yang buruk, dan karena saya awalnya menulis untuk saya, saya menjadi malas: D Setidaknya saya tidak menggabungkan jalur dengan garis miring yang naif atau menggunakan fungsi file-file khusus yang dihapus os.
Peter pete
Ini juga ditulis untuk versi Python 3.x. Jika Anda ingin ramah 2.x, ubah saja semua cetakan ("sesuatu") untuk mencetak "sesuatu"
Peter pete