วิธีการลบไฟล์ดิบ "ไม่ได้ใช้" ซึ่งไม่มี. jpg ตรงกันหรือไม่


10

ฉันยิง RAW + JPG คือ NEF และ JPG บางครั้งหลังจากดูภาพหลายร้อยภาพ (โดยใช้โปรแกรมอย่างง่าย) และลบ JPG ฉันมีไฟล์ NEF ที่เหลือโดยไม่จำเป็นจำนวนมาก หากมีสคริปต์ในการลบไฟล์ NEF เด็กกำพร้าใด ๆ ในไดเรกทอรีที่จะเป็นประโยชน์มาก ฉันอ่านคำถามที่คล้ายกันที่นี่ " วิธีการลบไฟล์ JPG แต่เฉพาะถ้าไฟล์ RAW ที่ตรงกันอยู่? " และวิธีแก้ปัญหาที่แสดงด้วยพรอมต์คำสั่งทำงานได้ดีมาก ฉันสงสัยว่ามีใครว่างสำหรับสถานการณ์ของฉันหรือไม่?


คุณสามารถให้ลิงค์ไปยังคำถามนี้ได้หรือไม่ คำตอบสำหรับเรื่องนี้จะเป็นเชลล์สคริปต์แน่นอน - อาจถาม SuperUser แทนเพราะถ้าคุณมีคำจำกัดความที่ดีเกี่ยวกับสิ่งที่คุณต้องการลบ (โดยชื่อไฟล์) นี่เป็นงานที่ค่อนข้างยุ่งยาก
Ben Parsons

1
สำหรับอนาคตเพียงใช้ Geeqie มันจะลบไฟล์ RAW ที่ตรงกันโดยอัตโนมัติและไฟล์อื่น ๆ ที่ถูกกำหนดให้เป็นไฟล์ 'sidecar' ตามการตั้งค่า
Itai

ฉันมีการตั้งค่าดังนี้: NEF: \\ Photos \ RAW \ YYYY \ YYYY-MM-DD \ original.nef Jpegs: \\ Photos \ RAW \ YYYY-MM-DD \ original.jpeg ต่อไปฉันสามารถใช้สิ่งนี้ได้ สคริปต์นี้

ใน Bash: orphan = .nef; ผู้ปกครอง = .jpeg; สำหรับ f ใน * "$ orphan"; ทำ F = "$ {f% $ orphan} $ parent"; ถ้าทดสอบ! -f "$ F"; echo "ephan ที่ระบุแล้ว: $ f มีอยู่ แต่ไม่ใช่ $ F"; เสร็จสิ้นแล้วไม่สามารถเชื่อได้ว่าคำตอบอื่น ๆ เหล่านั้นจะซับซ้อนและยาวเพียงใด ใช่ฉันรู้ตอบความคิดเห็น แต่ได้รับการคุ้มครอง ...
ไม่มีใคร

คำตอบ:


9

ฉันเขียนสคริปต์ในPythonเพื่อทำงานให้ฉัน มันเรียกว่าremove-orphaned-raw-images.pyและฉันตีพิมพ์บน Github

โดยทั่วไปมันวนซ้ำไฟล์ทั้งหมดในโฟลเดอร์ที่กำหนดและย้ายรูปภาพดิบที่ไม่ได้ใช้งาน (ใน*.CR2ไฟล์เคสของฉันโดยไม่มี JPEG ที่ตรงกัน) ไปยังโฟลเดอร์สำรอง คุณสามารถบอกให้สคริปต์ลบไฟล์ได้

นี่คือโครงร่างของอัลกอริทึม:

  • รับรายการไฟล์ทั้งหมดในไดเรกทอรีที่เลือก
  • จัดเรียงไฟล์เหล่านั้นเป็นไฟล์ RAW และ JPEG (ต่อท้ายรายการเหล่านั้น)
  • ตรวจสอบแต่ละรายการในรายการรูปภาพ RAW ว่ามีรายการตรงกันอยู่ในรายการ JPEG
    หากไม่มีให้เพิ่มรูปภาพนี้ต่อท้ายรายการภาพดิบที่ไม่ได้ใช้งาน
  • ย้ายรูปภาพในรายการรูปภาพที่ถูกโยงถึงไปยังโฟลเดอร์สำรอง
    (หรือลบออกโดยตรงหากต้องการอย่างชัดเจน)

เครื่องมือจะบอกวิธีใช้เมื่อเรียกใช้ด้วยตัวเลือกช่วยเหลือ-hในบรรทัดคำสั่ง

ปัญหานี้เกิดขึ้นกับฉันด้วยซึ่งเป็นสาเหตุที่ฉันเขียนเครื่องมือนี้ ฉันใช้ DSLR เพื่อถ่ายภาพ JPEG หรือ RAW + JPEG ไม่ใช่เฉพาะ RAW เมื่อจัดเรียงภาพเบลอหรือภาพที่ไม่ดีฉันใช้ JPEG เพื่อดูภาพเหล่านั้นอย่างรวดเร็วและลบภาพที่ไม่ดี ทำให้ฉันเหลือภาพ RAW ที่ฉันลบ JPEG ที่ตรงกัน (ด้วยเหตุผล)


5

ใช้คำถามที่คุณพูดถึง - ฉันเขียนสคริปต์ให้คุณ

โอเคเตือน! ระวังสคริปต์นี้ด้วย! - ทำการสำรองข้อมูล

1) สร้างไฟล์ bat ชื่อ clean.bat และวางไว้ใน dir ที่คุณต้องการใช้งาน

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
  • จากนั้นลบไฟล์ทั้งหมดออกจากโฟลเดอร์ต้นทาง
  • ย้ายไฟล์ที่เก็บไว้กลับมา
  • ลบโฟลเดอร์เก็บ

กรุณาลองทดสอบดูสิ!

UPDATE:การเปลี่ยนแปลงสคริปต์ทำให้ทำงานกับโฟลเดอร์ที่มีช่องว่างอยู่


2
+1 สำหรับโซลูชั่นที่ตรงไปตรงมาหนึ่งนัด! ฉันต้องการโซลูชันนี้มานานแล้ว ฉันเคยอธิบายคำสั่งอย่างละเอียดโดยการวาง DIR output ลงใน excel และใช้ตัวดำเนินการที่ซับซ้อนเช่น vlookup เพื่อสร้างคำสั่งแต่ละคำสั่ง แต่สิ่งนี้ดึงดูดความต้องการเกือบทั้งหมดของฉัน ทดสอบสคริปต์และมันใช้ได้ดีสำหรับฉัน ต้องศึกษาข้อมูลอ้างอิงหลายอย่างเพื่อทำความเข้าใจสคริปต์อย่างสมบูรณ์และสามารถแก้ไขได้สำหรับการทำงานอื่น ๆ ที่คล้ายคลึงกัน
Jahaziel

เยี่ยมมากคุณช่วยฉันทำงานที่น่าเบื่อหลายชั่วโมง !!! ฉันลองมันหลายครั้งและมันก็เร็วเกินไป มันเป็นสิ่งที่ฉันกำลังมองหา
อัล H

@ al-h - กรุณาทำเครื่องหมายถูกแล้ว? ขอบคุณ
Rob

Rob ฉันไม่แน่ใจในสิ่งที่คุณหมายถึงโดย "โปรดติ๊กถูกต้อง" ฉันไม่เห็นที่ไหนสักแห่งฉันสามารถตรวจสอบลิงค์ที่ถูกต้องได้
อัล H

สิ่งหนึ่งที่ฉันสังเกตเห็น สิ่งนี้ใช้ไม่ได้กับโฟลเดอร์บนเดสก์ท็อป (ลบไฟล์ jpg & NEF ทั้งหมด) ดังนั้นทดสอบก่อน ฉันใช้ Windows XP Pro
อัล H

1

นี่คือสคริปต์ python ของฉันเพื่อลบของ w2 oa jpeg

ค้นหาซ้ำในไดเรกทอรีปัจจุบัน "." จะพิจารณารูปภาพทั้งหมดในโฟลเดอร์ทั้งหมด

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 เป็นแพลตฟอร์มอิสระ
Saaru Lindestøkke

GDay pause.exe ที่ฉันใส่เท่านั้นเพื่อให้ python thing ไม่หายไปทันทีที่ดำเนินการเสร็จหลังจากฉันคลิกสองครั้งที่ explorer คุณมีอิสระที่จะลบบรรทัด thsi และ voila มันจะเป็นแพลตฟอร์มอิสระ การใช้สิ่งที่ขึ้นอยู่กับระบบปฏิบัติการเป็นสิ่งที่ไม่ดีและตั้งแต่แรกที่ฉันเขียนให้ฉันฉันขี้เกียจ: D อย่างน้อยฉันก็ไม่ได้เชื่อมเส้นทางที่ไร้เดียงสากับสแลชหรือใช้ฟังก์ชั่นการลบไฟล์เฉพาะระบบปฏิบัติการ
Peter pete

มันเขียนด้วยสำหรับเวอร์ชัน Python 3.x ถ้าคุณต้องการให้มันเป็น 2.x เป็นมิตรเพียงแค่เปลี่ยนการพิมพ์ทั้งหมด ("บางอย่าง") เพื่อพิมพ์ "บางสิ่งบางอย่าง"
Peter pete
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.