Làm cách nào để xóa các tập tin thô không sử dụng mà không có .jpg phù hợp?


10

Tôi chụp RAW + JPG, cụ thể là NEF và JPG. Sau khi xem đôi khi hàng trăm hình ảnh (sử dụng một chương trình đơn giản) và xóa JPG, tôi có nhiều tệp NEF còn sót lại không cần thiết. Nếu có một tập lệnh xóa bất kỳ tệp NEF mồ côi nào trong thư mục, điều đó sẽ rất hữu ích. Tôi đã đọc một câu hỏi tương tự ở đây " Cách xóa tệp JPG, nhưng chỉ khi tệp RAW phù hợp tồn tại? " Và giải pháp được trình bày với Dấu nhắc lệnh hoạt động rất tốt. Tôi đã tự hỏi nếu một trong những có sẵn cho tình trạng khó khăn của tôi?


Bạn có thể cung cấp một liên kết đến câu hỏi đó ở đây? Câu trả lời cho điều này gần như chắc chắn sẽ là một kịch bản shell - thay vào đó có thể hỏi về SuperUser, bởi vì nếu bạn có một định nghĩa tốt về những gì bạn cần xóa (theo tên tệp), thì đây là một nhiệm vụ khá nhỏ.
Ben Parsons

1
Đối với tương lai, chỉ cần sử dụng Geeqie. Nó tự động xóa các tệp RAW phù hợp và bất kỳ tệp nào khác được xác định là tệp 'sidecar' dựa trên cấu hình.
Itai

Tôi có thiết lập của mình như sau: NEF: \\ Photos \ RAW \ YYYY \ YYYY-MM-DD \ original.nef Jpegs: \\ Photos \ RAW \ YYYY \ YYYY-MM-DD \ original.jpeg kịch bản này?

Trong Bash: mồ côi = .nef; cha mẹ = .jpeg; cho f trong * "$ mồ côi"; làm F = "$ {f% $ mồ côi} $ cha mẹ"; nếu kiểm tra! -f "$ F"; sau đó lặp lại "Xác định trẻ mồ côi: $ f tồn tại nhưng không phải $ F"; fi thực hiện Không thể tin những câu trả lời khác dài và phức tạp. Vâng, tôi biết, trả lời bằng bình luận, nhưng nó được bảo vệ ...
Không ai vào

Câu trả lời:


9

Tôi đã viết một kịch bản bằng Python để thực hiện công việc cho tôi. Nó được gọi remove-orphaned-raw-images.pyvà tôi đã xuất bản nó trên Github .

Về cơ bản, nó lặp lại tất cả các tệp trong một thư mục nhất định và di chuyển các hình ảnh thô mồ côi (trong trường hợp của tôi *.CR2không có JPEG phù hợp) vào một thư mục sao lưu. Tùy chọn bạn có thể nói cho tập lệnh thực sự xóa các tập tin.

Dưới đây là một phác thảo của thuật toán:

  • Lấy danh sách tất cả các tập tin trong thư mục đã chọn.
  • Sắp xếp các tệp đó thành tệp RAW và JPEG (nối chúng vào danh sách riêng).
  • Kiểm tra từng mục trong danh sách ảnh RAW xem có tồn tại sự trùng khớp trong danh sách JPEG không;
    nếu không, hãy thêm hình ảnh này vào danh sách các hình ảnh thô mồ côi.
  • Di chuyển hình ảnh trong danh sách hình ảnh mồ côi vào thư mục sao lưu
    (hoặc trực tiếp xóa chúng nếu muốn rõ ràng).

Công cụ sẽ cho bạn biết cách sử dụng nó khi chạy với tùy chọn trợ giúp -htrên dòng lệnh.

Vấn đề này cũng xảy ra với tôi, đó là lý do tại sao tôi viết công cụ này. Tôi đang sử dụng máy ảnh DSLR của mình để chụp ảnh JPEG hoặc RAW + JPEG, không bao giờ chỉ RAW. Khi sắp xếp các ảnh mờ hoặc các ảnh xấu khác, tôi sử dụng các JPEG để nhanh chóng xem chúng và xóa các ảnh xấu. Điều này khiến tôi có những hình ảnh RAW còn sót lại mà tôi đã xóa các JPEG phù hợp (vì một lý do).


5

Sử dụng câu hỏi bạn đã đề cập - Tôi đã viết cho bạn một kịch bản

cảnh báo ok hãy cẩn thận với kịch bản này! - KIẾM MỘT BACKUP

1) Tạo một tập tin bat có tên là Clean.bat và đặt nó vào thư mục mà bạn muốn làm việc với

2) Sau đó nhập thông tin sau vào tập tin 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) Mở dấu nhắc lệnh với tư cách quản trị viên và điều hướng đến thư mục với Clean.bat 4) chạy clean.bat

Về cơ bản dòng chảy của kịch bản là

  • Tạo một thư mục có tên Keep
  • Di chuyển tất cả các tệp NEF phù hợp vào thư mục keep
  • Di chuyển tất cả các Jpeg vào thư mục keep
  • Sau đó xóa tất cả các tệp khỏi thư mục nguồn
  • Di chuyển các tập tin giữ lại
  • Xóa thư mục giữ

Xin vui lòng, xin vui lòng kiểm tra này!

CẬP NHẬT: Thực hiện thay đổi tập lệnh để làm việc với các thư mục có khoảng trắng trong đó


2
+1 cho một giải pháp đơn giản, một lần bắn! Tôi đã cần giải pháp này trong một thời gian dài. Tôi đã sử dụng để xây dựng các lệnh bằng cách dán đầu ra DIR vào excel và sử dụng các toán tử phức tạp như vlookup để tạo các lệnh riêng lẻ, nhưng điều này nắm bắt hầu hết tất cả các nhu cầu của tôi. Đã thử nghiệm kịch bản và nó hoàn toàn tốt cho tôi. Phải tham khảo một số tài liệu tham khảo để hiểu đầy đủ về tập lệnh và có thể sửa đổi nó cho các hoạt động tương tự khác.
Jahaziel

Tuyệt vời, bạn đã tiết kiệm cho tôi hàng giờ làm việc tẻ nhạt !!! Tôi đã thử nó nhiều lần và nó hoạt động quá nhanh. Nó chỉ là những gì tôi đang tìm kiếm.
Al H

@ al-h - xin vui lòng bạn có thể đánh dấu là chính xác sau đó? cảm ơn
Rob

Rob Tôi không chắc ý của bạn là gì bởi "làm ơn bạn có thể đánh dấu là chính xác" Tôi không thấy ở đâu đó tôi có thể kiểm tra một liên kết chính xác.
Al H

Một điều tôi đã thông báo. Điều này không hoạt động trên các thư mục trên máy tính để bàn (xóa tất cả các tệp jpg & NEF), vì vậy hãy kiểm tra trước. Tôi đang chạy Windows XP Pro.
Al H

1

Đây là tập lệnh python của tôi để xóa jpeg w / oa của cr2.

Nó tìm kiếm đệ quy trong thư mục hiện tại, ".". Nó xem xét tất cả các hình ảnh trong tất cả các thư mục.

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")

Chỉ cần đổi tên ".cr2" thành ".nef"
Peter pete

Tôi không quen thuộc với Python, nhưng tôi thấy nó đề cập đến "pause.exe" ở dòng cuối cùng. Điều này có nghĩa là nó chỉ hoạt động trên Windows? Tôi mặc dù Python là nền tảng độc lập.
Saaru Lindestøkke

Ngày Tạm dừng Tôi chỉ đưa vào để python thingo không biến mất ngay sau khi thực hiện xong, sau khi tôi nhấp đúp vào nó trên explorer. Bạn có thể tự do xóa dòng thsi và voila nó sẽ độc lập với nền tảng. Sử dụng công cụ phụ thuộc os là một cách làm tồi tệ và vì ban đầu tôi viết nó cho tôi, tôi đã lười biếng: D Ít nhất tôi đã không nối các đường dẫn với dấu gạch chéo ngây thơ cũng như không sử dụng các chức năng xóa tệp cụ thể của os.
Peter pete

Nó cũng được viết cho các phiên bản Python 3.x. Nếu bạn muốn nó trở nên thân thiện 2.x, chỉ cần thay đổi tất cả các bản in ("một cái gì đó") để in "một cái gì đó"
Peter pete
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.