"अप्रयुक्त" कच्ची फ़ाइलों को कैसे हटाएं जिनके पास कोई .jpg मैच नहीं है?


10

मैं RAW + JPG, अर्थात् NEF और JPG शूट करता हूं। कभी-कभी सैकड़ों छवियां (एक साधारण प्रोग्राम का उपयोग करके) और जेपीजी को हटाने के बाद, मेरे पास कई अनावश्यक बचे हुए एनईएफ फाइलें हैं। यदि निर्देशिका में किसी भी अनाथ एनईएफ फ़ाइलों को हटाने के लिए एक स्क्रिप्ट थी, तो यह बहुत उपयोगी होगा। मैंने यहां एक समान प्रश्न पढ़ा " जेपीजी फ़ाइलों को कैसे हटाएं, लेकिन केवल अगर मिलान रॉ फ़ाइल मौजूद है? " और कमांड प्रॉम्प्ट के साथ प्रस्तुत समाधान बहुत अच्छी तरह से काम करता है। मैं सोच रहा था कि क्या कोई मेरी भविष्यवाणी के लिए उपलब्ध था?


क्या आप यहां उस प्रश्न का लिंक प्रदान कर सकते हैं? इसका उत्तर लगभग निश्चित रूप से एक शेल स्क्रिप्ट होगा - हो सकता है कि इसके बजाय सुपरयूजर से पूछें, क्योंकि यदि आपके पास एक अच्छी परिभाषा है जिसे आपको हटाने की आवश्यकता है (फ़ाइल नाम से), यह एक काफी तुच्छ कार्य है।
बेन पार्सन्स

1
भविष्य के लिए, बस Geeqie का उपयोग करें। यह मिलान की गई रॉ फ़ाइलों को स्वचालित रूप से हटा देता है और किसी अन्य को जो कि विन्यास के आधार पर 'साइडकार' फ़ाइल के रूप में परिभाषित किया गया है।
इताई

मेरे पास मेरा सेटअप इस प्रकार है: NEF: \\ तस्वीरें \ RAW \ YYYY \ YYYY-MM-DD \ original.nef इसके लिए स्क्रिप्ट?

बश में: अनाथ = .nef; माता पिता = .jpeg; एफ में * "$ अनाथ" के लिए; do F = "$ {f% $ अनाथ} $ माता-पिता"; अगर परीक्षण! -f "$ एफ"; तब गूंज "पहचान अनाथ: $ एफ मौजूद है, लेकिन $ एफ नहीं"; फाई किया विश्वास नहीं कर सकते हैं कि कितने लंबे और जटिल अन्य जवाब हैं। हाँ, मुझे पता है, टिप्पणी में जवाब है, लेकिन यह संरक्षित है ...
कोई भी

जवाबों:


9

मैंने अपने लिए काम करने के लिए पायथन में एक स्क्रिप्ट लिखी । यह कहा जाता है remove-orphaned-raw-images.pyऔर मैंने इसे गितुब पर प्रकाशित किया ।

मूल रूप से यह किसी दिए गए फ़ोल्डर में सभी फाइलों पर पुनरावृत्ति करता है और अनाथ कच्ची छवियों (मेरे मामले की *.CR2फाइलों में जेपीईजी से मेल नहीं खाता) को एक बैकअप फ़ोल्डर में ले जाता है। वैकल्पिक रूप से आप स्क्रिप्ट को वास्तव में फ़ाइलों को हटाने के लिए कह सकते हैं।

यहाँ एल्गोरिथ्म की एक रूपरेखा है:

  • चयनित निर्देशिका में सभी फ़ाइलों की एक सूची प्राप्त करें।
  • उन फ़ाइलों को RAW और JPEG फ़ाइलों में क्रमबद्ध करें (उन्हें अलग सूची में जोड़ें)।
  • RAW छवियों की सूची में प्रत्येक आइटम की जाँच करें कि एक मैच JPEG सूची में मौजूद है;
    यदि नहीं, तो इस चित्र को अनाथ कच्ची छवियों की सूची में जोड़ें।
  • अनाथ छवियों की सूची में छवियों को एक बैकअप फ़ोल्डर में ले जाएं
    (या यदि स्पष्ट रूप से चाहते हैं तो उन्हें सीधे हटा दें)।

टूल आपको बताएगा -hकि कमांड लाइन पर मदद विकल्प के साथ चलने पर इसका उपयोग कैसे करें ।

यह समस्या मुझे भी हुई, जिसके कारण मैंने यह उपकरण लिखा। मैं अपने DSLR का उपयोग JPEG या RAW + JPEG चित्र लेने के लिए कर रहा हूँ, केवल RAW कभी नहीं। धुँधली या अन्यथा खराब शॉट्स को छांटते समय, मैं जल्दी से उन पर नज़र डालने और बुरे लोगों को हटाने के लिए जेपीईजी का उपयोग करता हूं। यह मुझे बाईं ओर की रॉ छवियों के साथ छोड़ देता है जिनमें से मैंने मैचिंग जेपीईजी (एक कारण के लिए) को हटा दिया है।


5

आपके द्वारा उल्लेखित प्रश्न का उपयोग करते हुए - मैंने आपको एक स्क्रिप्ट लिखी है

ठीक है चेतावनी! इस लिपि से सावधान! - एक बैकअप बनाएँ

1) एक बैट फाइल बनाइए जिसका नाम clean.bat है और इसे उस डीआर में रखें जिसे आप काम करना चाहते हैं

2) फिर बैट फाइल में निम्नलिखित दर्ज करें

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) व्यवस्थापक के रूप में कमांड प्रॉम्प्ट खोलें और क्लीन के साथ फ़ोल्डर में नेविगेट करें। 4) स्वच्छ क्लीन को चलाएँ

मूल रूप से स्क्रिप्ट का प्रवाह है

  • एक निर्देशिका बनाओ जिसे कीप कहा जाता है
  • सभी मेल एनईएफ फ़ाइलों को फ़ोल्डर में रखें
  • सभी Jpegs को फोल्डर में रखें
  • फिर स्रोत फ़ोल्डर से सभी फ़ाइलों को हटा दें
  • फाइल को वापस ले जाएं
  • कीप फोल्डर को हटा दें

कृपया, कृपया इसका परीक्षण करें!

अद्यतन: उन फ़ोल्डरों के साथ काम करने के लिए स्क्रिप्ट में परिवर्तन किया गया है, जिनमें रिक्त स्थान हैं


2
एक सीधा, एक शॉट समाधान के लिए +1! मुझे लंबे समय से इस समाधान की आवश्यकता है। मैं डीआईआर आउटपुट को एक्सेल में चिपकाकर और व्यक्तिगत आदेशों को उत्पन्न करने के लिए vlookup जैसे जटिल ऑपरेटरों का उपयोग करके आदेशों को विस्तृत करता था, लेकिन यह मेरी लगभग सभी जरूरतों को पूरा करता है। मेरे लिए स्क्रिप्ट और इसके पूरी तरह से ठीक होने का परीक्षण किया। स्क्रिप्ट को पूरी तरह से समझने और अन्य समान कार्यों के लिए इसे संशोधित करने में सक्षम होने के लिए कई संदर्भों से परामर्श करना पड़ा।
जाहजिल

शानदार, तुमने मुझे थकाऊ काम के घंटे बचाया है !!! मैंने इसे कई बार आजमाया और यह बहुत तेजी से काम करता है। यह वही है जो मैं देख रहा था।
अल एच।

@ अल-एच - क्या आप सही होने पर टिक कर सकते हैं? धन्यवाद
रॉब

रोब मैं अनिश्चित हूँ कि आप क्या मतलब है "कृपया आप सही के रूप में टिक कर सकते हैं" मैं कहीं नहीं देखता कि मैं एक सही लिंक की जांच कर सकता हूं।
अल

एक बात मैंने नोटिस की। यह डेस्कटॉप पर फ़ोल्डर्स पर काम नहीं करता है (सभी jpg और एनईएफ फ़ाइलों को हटाता है), इसलिए पहले परीक्षण करें। मैं विंडोज एक्सपी प्रो चला रहा हूं।
अल

1

यहाँ cr2 w / 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" नाम दें
पीटर पीट

मैं पायथन से परिचित नहीं हूं, लेकिन मुझे लगता है कि यह अंतिम पंक्ति में "pause.exe" को संदर्भित करता है। इसका मतलब यह है कि यह केवल विंडोज पर काम कर रहा है? हालांकि मैं अजगर स्वतंत्र मंच था।
सारू लिंडस्टोक

अच्छा दिन। Pause.exe मैंने केवल इतना ही रखा है कि अजगर ख़त्म होते ही गायब नहीं हो जाता, क्योंकि मैं इसे एक्सप्लोरर पर डबल क्लिक करता हूँ। आप thsi लाइन को हटाने के लिए स्वतंत्र हैं और वोइला यह स्वतंत्र मंच होगा। ओएस पर निर्भर सामान का उपयोग करना बुरा अभ्यास है, और जब से मैंने शुरू में इसे मेरे लिए लिखा था, मैं आलसी हो रहा था: डी कम से कम मैंने भोले-भाले स्लैश के साथ पथ नहीं बनाए थे और न ही ओएस विशिष्ट डिलीट-फाइल कार्यों का उपयोग किया था।
पीटर पीट

यह पायथन 3.x संस्करणों के लिए भी लिखा गया है। यदि आप चाहते हैं कि यह 2.x मैत्रीपूर्ण हो तो बस "कुछ" प्रिंट करने के लिए सभी प्रिंट ("कुछ") को बदल दें
पीटर पेटे
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.