কীভাবে জেপিজি ফাইলগুলি মুছবেন, তবে কেবলমাত্র ম্যাচের RAW ফাইল বিদ্যমান থাকলে?


18

আমার প্রারম্ভিক (ক্যানন জি 2) ফটোগুলি সমস্ত জেপিজি, তবে আমি যখন আমার নিকন ডি 90 পেয়েছিলাম তখন প্রাথমিকভাবে আমি জেপিজিতে গুলি করেছিলাম, তারপরে RAW + জেপিজিতে স্যুইচ করেছি এবং এখন আমি কেবলমাত্র আরএডাব্লুতে যেতে চাই।

আমি আমার এইচডিডি তে আক্ষরিক সহস্র ফটো রেখেছি। আমদানি নামক একক ডিরেক্টরিতে ফটোগুলি উপ-ডিরেক্টরিতে (তারিখ অনুসারে) থাকে।

আমি লাইটরুম 3.0.০ এ এই সমস্ত ফটো আমদানি করতে চলেছি, তবে আমি সমস্ত জেপিজি ফাইল মুছতে চাই, তবে কেবল যেখানে ইতিমধ্যে সম্পর্কিত র ফাইল রয়েছে (যেমন। আমি আর আর জেপিজি এবং আরএডাব্লু এর সংস্করণ রাখতে চাই না) ফাইল)।

আমি যদি লাইটরুমের মধ্যে সহজেই এটি করতে পারি (ডুপ্লিকেট জেপিজি ফাইলগুলি সহ সমস্ত কিছু আমদানির পরে) যা দুর্দান্ত হবে। ফাইলগুলি আমদানির আগে এটি করার কোনও সহজ উপায় থাকলে এটিও ঠিক থাকবে (তবে আশা করা যায় এটিতে জেপিজি এবং এনইএফ উভয় এক্সটেনশান সহ ফাইলের নাম অনুসন্ধান করার জন্য প্রতিটি ডিরেক্টরি পরিদর্শন করা জড়িত না)।

কেউ কি এটি করার কোনও উপায় জানেন (লাইটরুমে, বা উইন্ডোজের কোনও সরঞ্জাম / স্ক্রিপ্ট সহ)?


আপনার সমস্ত jpg ফাইল এবং RAW ফাইলের ন্যূনতম একই স্ট্রিং রয়েছে (অন্য অক্ষরগুলির মধ্যে কোনওটি যোগ করা যেতে পারে)? যেমন IMG_1234_portrait_picture.jpg এবং IMG_1234.CR2।
dpollitt

আমি মনে করি আমার সমস্ত জেপিজি / এনইএফ জোড়গুলির ঠিক একই ফাইল নাম রয়েছে (এক্সটেনশন বাদে)।
seanmc

3
আমি এটিকে স্ট্যাক ওভারফ্লোতে স্থানান্তরিত করতে ভোট দেব, যেখানে আপনার কয়েক মিনিটের মধ্যেই উত্তর পাওয়া উচিত =)
আনান

1
@ অ্যানন: স্ট্যাকওভারফ্লোতে এটি কীভাবে যুক্ত? এটি এখানে অবশ্যই একটি বিষয়-সংক্রান্ত প্রশ্ন, কারণ এটি চিত্র পরিচালনা এবং ফটো সম্পাদনার সরঞ্জামগুলির সাথে সম্পর্কিত। স্ক্রিপ্টের একটি স্পর্শকাতর রেফারেন্সের বাইরে ... প্রোগ্রামিংয়ের সাথে এর কোনও যোগসূত্র নেই।
জ্রিস্টা

2
আমি এই প্রশ্নটিকে অফ-টপিক হিসাবে বন্ধ করতে ভোট দিচ্ছি কারণ এটি প্রকৃতপক্ষে ফটোগ্রাফির বিষয়ে নয়, এটি ফাইল পরিচালনার বিষয়ে যা কেবল আলোকচিত্র হিসাবে ঘটে be প্রশ্নোত্তর দুটি ধরণের ফাইল যদি অন্য কোনও ধরণের ফাইলগুলি হয় যা কোনও ফর্ম থেকে অন্য ফর্ম যেমন .doc এবং .pdf ফাইল ইত্যাদি অনুবাদ করা
যেত

উত্তর:


24

উপর উইন্ডোজ , ফোল্ডারে যান, এবং একটি কমান্ড প্রম্পটে এই সঞ্চালন করুন:

for /f "delims==" %r in ('dir /b *.nef') do del "%~dpr%~nr.jpg" 2> nul

মূলত, এটি বর্তমান ফোল্ডারের মধ্য দিয়ে যায়, এনইএফ ফাইলগুলির মধ্য দিয়ে চলে এবং যদি উপস্থিত থাকে তবে জেপিজি মুছে দেয়। এটি যদি জেপিজি না থাকে তবে এটি কোনও ত্রুটি উপেক্ষা করে।

আপনি যদি সাবফোল্ডারগুলি চান /sতবে dirকমান্ডটিতে অন্তর্ভুক্ত করুন ।


3
পারফেক্ট, ধন্যবাদ! অবশ্যই প্রথমবার এটি চালানোর আগে আমি "ডেল" কে "ইকো" তে পরিবর্তন করেছি। তারপরে এটি কী করছে তা বুঝতে আমি "সহায়তার জন্য" দৌড়েছি। স্পষ্টতই কমান্ড প্রম্পট স্ক্রিপ্টিংটি দেখার পর থেকে এটি অবশ্যই দীর্ঘ সময় হয়েছে, কারণ "ফর" কমান্ডের এতগুলি বিকল্প রয়েছে তা আমার কোনও ধারণা ছিল না।
seanmc

সমস্যা নেই! আমি যেমন পরীক্ষা করছিলাম তখন আমি "প্রতিধ্বনি" = ব্যবহারও করেছি) আরও আউটপুট দেখতে, "2> নুল" সরান। আমি নিজের এনইএফ / জেপিজি ফাইলগুলির জন্য এই জাতীয় কিছু করার অর্থ পেয়েছি এবং এটি ছিল সঠিক সুযোগ।
আনন

7

এখানে টমির পাইথন স্ক্রিপ্টের একটি পরিবর্তিত সংস্করণ রয়েছে । পার্থক্য:

  • একাধিক কাঁচা এক্সটেনশান অনুমোদিত
  • জোপগুলি কেবল একই ফোল্ডারে থাকলে অপসারণ করুন (অন্য ফোল্ডারে কাঁচা ফাইলের মতো নামানো জেপিজি দুর্ঘটনাজনিত অপসারণ এড়াতে)
  • সংবেদনশীল

#!/usr/bin/env python
# Script:      remove_jpg_if_raw_exists.py
#
# Description: This script looks in all sub directories for
#              pairs of JPG and RAW files.
#              For each pair found the JPG is moved to a
#              waste basket directory.
#              Otherwise JPG is kept.
#
# Author:      Thomas Dahlmann
# Modified by: Renaud Boitouzet

import os
import shutil

# define your file extensions here, case is ignored.
# Please start with a dot.
# multiple raw extensions allowed, single jpg extension only
raw_extensions = (".Dng", ".cR2", ".nef", ".crw")
jpg_extension = ".jPg"

# define waste basket directory here. Include trainling slash or backslash.
# Windows : waste_dir = "C:\path\to\waste\"
waste_dir = "/Users/marvin/Pictures/waste/"

##### do not modify below ##########

# find files
def locate(folder, extensions):
    '''Locate files in directory with given extensions'''
    for filename in os.listdir(folder):
        if filename.endswith(extensions):
            yield os.path.join(folder, filename)

# make waste basket dir
if not os.path.exists(waste_dir):
    os.makedirs(waste_dir)

# Make search case insensitive
raw_ext = tuple(map(str.lower,raw_extensions)) + tuple(map(str.upper,raw_extensions))
jpg_ext = (jpg_extension.lower(), jpg_extension.upper())

root=os.curdir
#find subdirectories
for path, dirs, files in os.walk(os.path.abspath(root)):
    print path
    raw_hash = {}
    for raw in locate(path, raw_ext):
        base_name = os.path.basename(raw)
        base_name = os.path.splitext(base_name)[0]
        raw_hash[base_name] = True

    # find pairs and move jpgs of pairs to waste basket
    for jpg in locate(path, jpg_ext):
        base_name = os.path.basename(jpg)
        base_name = os.path.splitext(base_name)[0]
        if base_name in raw_hash:
            jpg_base_name_with_ext = base_name + jpg_extension
            new_jpg = waste_dir + jpg_base_name_with_ext
            print "%s: %s = %s => %s" % (path, base_name, jpg, waste_dir)
            if os.path.exists(new_jpg):
                os.remove(jpg)
            else:
                shutil.move(jpg, new_jpg)

দুর্দান্ত স্ক্রিপ্ট আমি এটি ব্যবহার করব কারণ এর অনেকগুলি ভাল ব্যর্থ ওভার রয়েছে। তবে আপনার #!/usr/bin/env pythonশুরুতে এই লাইনটি যুক্ত করা উচিত । অন্যথায় আমার কাছে অদ্ভুত ইমেজম্যাগিক ত্রুটি ছিল (মনে হচ্ছে আমার
ম্যাকটি। চিত্রম্যাগিকের

কেবলমাত্র এফওয়াইআই: এটি ফাইলগুলি প্রকৃত নামকরণের পরে কার্যকর হয় না বলেও মনে হয় .jPg। ফাইলগুলি যখন বাহ্যিক ডিস্ক এবং বর্জ্য ডিরেক্টরিতে থাকে যেমন /homeডিয়ারে এটি কাজ করে না ।
Therealmarv


@ থেরিয়ালমার্ভ: আসলে ইমেজম্যাগিকের সাথে যা ঘটছে তা হ'ল চিত্রনাট্যটি শেলটিতে খোলা হচ্ছে, ইমেজম্যাগিক নয়, তবে "আমদানি" একটি ইমেজম্যাগিক সরঞ্জামটির নাম।
সর্বোচ্চ

6

এখানে কোনও পাইথন স্ক্রিপ্ট রয়েছে যা JPGসম্পর্কিত RAWফাইল উপস্থিত না থাকায় ফাইলগুলিকে সরিয়ে দেয় । দরকারী Mac OS X এর !

import os
import shutil

raw_ext = '.CR2'
jpg_ext = '.JPG'
destination = '/Users/JohnSmith/Desktop/jpgs/'

for filename in os.listdir('.'):
    (shortname, extension) = os.path.splitext(filename)

    if extension == raw_ext:
        if os.path.isfile(shortname + jpg_ext):
            print 'Moving ' + shortname + jpg_ext + '...'
            shutil.move(shortname + jpg_ext, destination)

5
  • একটি খালি লাইব্রেরি তৈরি করুন
  • লাইটরুমের প্রধান মেনু থেকে, সম্পাদনা> পছন্দসমূহ (উইন্ডোজ) বা লাইটরুম> পছন্দসমূহ (ম্যাক ওএস) নির্বাচন করুন।
  • সাধারণ পছন্দগুলিতে অনির্বাচিত "কাঁচা ফাইলের পাশের জেপিইজি ফাইলগুলিকে পৃথক পৃথক ফটো হিসাবে গণ্য করুন"
    • এটি ডিফল্ট হওয়া উচিত।
  • আপনার সমস্ত ফাইল আমদানি করুন (আপনি অনুসন্ধান সাবফোল্ডারগুলি নির্বাচন করতে পারেন), এটি একটি নতুন অবস্থানে যেতে বলছেন
  • আপনার অপসারণের জন্য যে জেপিজি ফাইলগুলিতে র ফাইল রয়েছে সেগুলি আসল অবস্থানে রেখে যাবে

আমি এটি বুঝতে পারি, লাইটরুমের থাম্বনেইলটি RAW + JPG বলতে পারে, তবে জেপিজি আসলে কোনওভাবেই সঞ্চিত বা অ্যাক্সেসযোগ্য নয়।

আপনি যে কোনও প্রোগ্রামিং ভাষার সাথে একটি দুর্দান্ত সরল ব্যাচের স্ক্রিপ্টও লিখতে পারেন।


2

আমি ওএস এক্সের জন্য বাশ স্ক্রিপ্টটি পছন্দ করি ( টি.ওয়েভেনেন দ্বারা ) তবে আমি লক্ষ্য করেছি যে এখানে কয়েকটি সমস্যা রয়েছে।

  • এটি আমার ডিরেক্টরি নাম পছন্দ করে নি, যার মধ্যে স্পেস রয়েছে। এর জন্য ফাইন্ড কমান্ডটি সামান্য আলাদাভাবে পরিচালনা করা দরকার।

  • মূল স্ক্রিপ্টটি কেবল ছোট হাতের এক্সটেনশনের জন্য কাজ করে। আমি স্ক্রিপ্টের সেই অংশটি কিছুটা উন্নত করেছি যেহেতু বড় হাতের অক্ষরে থাকা এক্সটেনশনের জন্য অ্যাকাউন্ট করতে পারি। মনে রাখবেন যে, এটি শুধুমাত্র গ্রহণ, DNG+JPGবা dng+jpg, জোড়া এবং এটি যেমন কোনো সমন্বয় উপেক্ষা করা হবে DNG+jpgবা DnG+JpG

  • মূল সমাধানটি কেবলমাত্র একটি wastedirঅবস্থান প্রস্তাব করেছিল , যদিও আমার ফিক্সটি যদিও প্রতিটি ভ্রমণ শাখায় একটি উপ-ডিরেক্টরি তৈরি করতে দেয় তবে এটি ভ্রমণ করে। আপনি লুপের আগে ডিরেক্টরিটির একটি নাম নির্ধারণ করেন।

  • আমি কী চলছে তা দেখতে পছন্দ করি, বিশেষত যখন mvবা rmআদেশগুলি ব্যবহৃত হয়;)

স্থান আমি স্ক্রিপ্টের শুধুমাত্র শেষ অংশ দেখাচ্ছে am, একটি সেট করা থেকে অভিপ্রায় জন্য basedir, wastedirএবং লুপ।

[...]

#Now set it as a basedir
BASEDIR=$arg
WASTEDIR=duplicates
find "$BASEDIR" -iname '*.dng' -print0 | while read -d $'\0' filename 
    do
    filepath="${filename%/*}"
    basename="${filename##*/}"
    prefix="${basename%%.*}"
    suffix=${filename##*.}
    if [[ "$suffix" =~ [A-Z] ]]; then rsuffix="JPG"; else rsuffix="jpg"; fi 
    if [ -e "$filepath/$prefix.$rsuffix" ]; then
        let counter="$counter+1"
        if (( $isSetE==1 )); then
            echo "FOUND: $filepath/$prefix.$rsuffix"
        fi
        if (( $isSetM==1 )); then
            echo "Moving $filepath/$prefix.$rsuffix to $filepath/$WASTEDIR"
            if [ ! -d "$filepath/$WASTEDIR" ]; then mkdir "$filepath/$WASTEDIR"; fi
            mv "$filepath/$prefix.$rsuffix" "$filepath/$WASTEDIR"
        fi
        if (( $isSetD==1 )); then
            echo "Removing duplicate $filepath/$prefix.$rsuffix"
            rm "$filepath/$prefix.$rsuffix"
        fi
    fi
done

প্রশ্নটিকে "উইন্ডোজ" ট্যাগ করা হয়েছিল যাতে আপনি এটি একটি সাধারণ উইন্ডোজ সিস্টেমে কীভাবে কাজ করতে পারেন তা বলার সাথে করতে পারেন। উদাহরণস্বরূপ আমি সাইগউইন চালাচ্ছি (এবং আমি ডেস্কটপে থাকাকালীন এই আচরণটি কিছুটা পরিবর্তন করার জন্য এই উত্তরটি আরও ভালভাবে দেখার পরিকল্পনা করি)
ক্রিস এইচ

2

এখানে bash(লিনাক্স বা ম্যাক ওএস এক্স) এর একটি সমাধান রয়েছে । উইন্ডোজে, আপনি এর অনুলিপি পেতে সাইগউইন ইনস্টল করতে পারেন bash

keep=$(ls | grep -v ps | grep -A1 JPG | grep NEF)
for i in $keep ; do
   mv $i $i.keep
done

ls | egrep -v '(JPG|keep)' | xargs rm -f

change=$(ls | grep keep | sed 's/.keep//g')
for i in $change ; do
   mv $i.keep $i
done

2

এখানে (লিনাক্স) bashব্যবহার করে অন্য একটি সংস্করণ দেওয়া আছে find। সঙ্গে বেন Pingilley এর উত্তর , আপনি ইনস্টল করতে পারেন Cygwin Windows এ ব্যাশ জন্য।

#!/bin/bash
read -p "please enter file suffix for raw format (e.g ORF, NEF, CR2): " suffix

find . -type f -iname "*.${suffix}" | \
while read line
do
  lowercase=$(echo "$line" | sed "s/${suffix}/jpg/gi")
  uppercase=$(echo "$line" | sed "s/${suffix}/JPG/gi")

  if [ -f "${lowercase}" ]
  then
    rm -v "${lowercase}"
  elif [ -f "${uppercase}" ]
  then
    rm -v "${uppercase}"
  else
    echo "${line}: no jpg present"
  fi
done

1

এই বিষয়টিতে আমার গ্রহণযোগ্যতা এখানে। এখানে উল্লিখিত পূর্ববর্তী লিপিগুলি থেকে প্রচুর ভাল ধারণা এসেছে।

এটি ওএস এক্সের জন্য একটি বাশ স্ক্রিপ্ট । এটি একই ফাইল ফাইল এবং dng+jpgএক্সটেনশনগুলির সাথে বিদ্যমান এমন ফাইলগুলির সন্ধান করে । যদি jpgকোনও ঠিক একই নামের সাথে পাওয়া যায় dng, তবে সেই -eফাইলটির নাম প্রদর্শিত হবে ( ), ফাইল সরানো ( -m) বা মুছে ফেলা ( -d)।

এটি সাবফোল্ডারগুলির মধ্য দিয়ে যাবে, যাতে আপনি এটি আপনার পুরো ক্যাটালগ বা এর কিছু অংশের জন্য ব্যবহার করতে পারেন।

অন্যান্য কাঁচা ফাইল এক্সটেনশনের জন্য *.dngআপনার পছন্দসই এক্সটেনশানটির সাথে স্ক্রিপ্টে কেবলমাত্র বিকল্প তৈরি করুন ।

সতর্কতা: আপনার কাছে একই নামের সাথে দুটি ভিন্ন চিত্র থাকতে পারে, তবে আলাদা এক্সটেনশন। যারা এই লিপির অনিবার্য হতাহত।

স্ক্রিপ্টটি কীভাবে ব্যবহার করবেন তা এখানে:

Usage: dng-jpg.sh [-m <path>] [-d <path>] [-e <path>] [-h]

-m: for move   (moves files to <path>/duplicates)
-d: for delete (deletes duplicate files)
-e: for echo   (lists duplicate files)
-h: for help 

বেসিক ব্যবহার এইভাবে কাজ করবে:

$ ./dng-jpg.sh -e /Volumes/photo/DNG/2015

এটি ফাইলের সমস্ত ফাইলের নাম প্রতিধ্বনিত jpgকরে যা উভয় থাকার মানদণ্ডের সাথে মেলে dngএবং jpgএকই নামের সাথে ফাইল করে।

ফলাফলটি এরকম কিছু দেখাবে:

Echo selected with path: /Volumes/photo/DNG/2015
/Volumes/photo/DNG/2015/03/18/2015-03-18_02-11-17.jpg
/Volumes/photo/DNG/2015/06/01/2015-06-01_05-10-50.jpg
/Volumes/photo/DNG/2015/06/01/2015-06-01_05-10-56.jpg
/Volumes/photo/DNG/2015/06/01/2015-06-01_05-11-39.jpg
/Volumes/photo/DNG/2015/06/01/2015-06-01_05-11-54.jpg
/Volumes/photo/DNG/2015/06/01/2015-06-01_05-12-26.jpg
/Volumes/photo/DNG/2015/06/01/2015-06-01_05-12-43.jpg
/Volumes/photo/DNG/2015/06/01/2015-06-01_05-13-21.jpg
/Volumes/photo/DNG/2015/06/01/2015-06-01_05-13-56.jpg
9 files found.

এখন যদি আমি ফাইল আমি শুধু সুইচ করবে মুছে ফেলতে চান -eকরতে -d:

$ ./dng-jpg.sh -d /Volumes/photo/DNG/2015

বা যদি আমি ফাইলগুলি / নকলগুলিতে সরাতে চাই তবে আমি এটির সাথে সম্পাদন করব -m

$ ./dng-jpg.sh -m /Volumes/photo/DNG/2015

এখন সদৃশ jpgফাইলগুলি হবে/Volumes/photo/DNG/2015/duplicates

স্ক্রিপ্টটি এখানে: dng-jpg.sh

#!/bin/bash

# Init variables
isSetM=0
isSetD=0
isSetE=0
isSetCount=0
counter=0

#Display usage info
usage() {

    cat <<EOF

Usage: dng-jpg.sh [-m <path>] [-d <path>] [-e <path>] [-h]

-m: for move   (moves files to <path>/duplicates)
-d: for delete (deletes duplicate files)
-e: for echo   (lists duplicate files)
-h: for help 

EOF
  exit 1
}

#Check for parameters
while getopts ":m:d:e:h" opt; do
  case ${opt} in
    m)
        isSetM=1
        let isSetCount="$isSetCount+1"
        arg=${OPTARG}
      echo "Move selected with path:" $arg
      ;;
    d)
        isSetD=1
        let isSetCount="$isSetCount+1"
        arg=${OPTARG}
      echo "Delete selected with path:" $arg
      ;;
    e)
        isSetE=1
        let isSetCount="$isSetCount+1"
        arg=${OPTARG}
      echo "Echo selected with path:" $arg
      ;;
    h)
        let isSetCount="$isSetCount+1"
        usage
      ;;
    \?)
      echo "Invalid option: -$OPTARG" >&2
      usage
      ;;
    :)
      echo "Option -$OPTARG requires a directory argument." >&2
      usage
      ;;
    *)
      usage
      ;;
  esac
done

# If no parameters, show usage help and exit
if test -z "$1"; then
    usage
fi

# If multiple parameters (not counting -a), show usage help and exit
if (($isSetCount > 1)); then
    usage
fi

#Verify directory
if [ ! -d "$arg" ]; then
  echo "$arg is not a path to a directory." >&2
  usage
fi

#Now set it as a basedir
BASEDIR=$arg
WASTEDIR="$BASEDIR/duplicates/"
if (( $isSetM==1 )); then
    mkdir $WASTEDIR
fi

for filename in $(find $BASEDIR -name '*.dng' -exec echo {} \; | sort); do
   prefix=${filename%.dng}
    if [ -e "$prefix.jpg" ]; then
        let counter="$counter+1"
        if (( $isSetE==1 )); then
            echo "$prefix.jpg"
        fi
        if (( $isSetM==1 )); then
            mv $prefix.jpg $WASTEDIR
        fi
        if (( $isSetD==1 )); then
            rm $prefix.jpg
        fi
    fi
done

echo "$counter files found."

1

এখানে ম্যাক ওএস এক্সেরbash জন্য একটি স্ক্রিপ্ট রয়েছে । এটি কিছু পরিবর্তন সহ লিনাক্সে কাজ করতে পারে

#!/bin/bash
read -p "Delete JPEGs when DNG exists? Ctrl-C to cancel. [Enter] to continue: "

for FILE in *.dng; do
  JPG_FILE=$(echo "$FILE" | sed "s/dng/jpg/g")
  rmtrash "${JPG_FILE}" 1>/dev/null
done

rmtrashএমন একটি ইউটিলিটি যা ফাইলগুলি সরাসরি মুছে ফেলার পরিবর্তে ট্র্যাশে স্থানান্তরিত করে। আপনি ম্যাকপোর্টগুলি থেকে এটি পেতে পারেন:

sudo port install rmtrash

যদি আপনি এটি এড়াতে চান rmtrashতবে স্ক্রিপ্টটি কেবল এর সাথে প্রতিস্থাপন করুন rm, যা অবিলম্বে JPGফাইলগুলি মুছবে ।


1

আমি নিম্নলিখিত পাইথন স্ক্রিপ্ট লিখেছি । তাতভীরের স্ক্রিপ্টের সাথে তুলনা করে এটি কিছু অতিরিক্ত কাজ করে।

  • সাব ডিরেক্টরিতে দেখায়।
  • গন্তব্য বর্জ্য ডিরেক্টরি তৈরি করে।
  • সরানোর ত্রুটিগুলি এড়ানোর জন্য বর্জ্য ডিরেক্টরিতে ইতিমধ্যে বিদ্যমান ফাইলগুলি সরিয়ে দেয়।

# Script:      remove_jpg_if_raw_exists.py
#
# Description: This script looks in all sub directories for
#              pairs of JPG and RAW files.
#              For each pair found the JPG is moved to a
#              waste basket directory.
#              Otherwise JPG is kept.
#
# Author:      Thomas Dahlmann

import os, fnmatch

# define your file extensions here, case is ignored
raw_extension = "nef"
jpg_extension = "jpg"

# define waste basket directory here
waste_dir = "c:\image_waste_basked"

##### do not modify below ##########

# recursive find files 
def locate(pattern, root=os.curdir):
    '''Locate all files matching supplied filename pattern 
    in and below root directory.'''
    for path, dirs, files in os.walk(os.path.abspath(root)):
        for filename in fnmatch.filter(files, pattern):
            yield os.path.join(path, filename) 

# get base names from raw's
raw_hash = {}
for raw in locate("*." + raw_extension):
    base_name = os.path.basename(raw)
    base_name = os.path.splitext(base_name)[0]
    raw_hash[base_name] = True

# make waste basket dir
if not os.path.exists(waste_dir):
    os.makedirs(waste_dir)

# find pairs and move jpgs of pairs to waste basket    
for jpg in locate("*." + jpg_extension):
    base_name = os.path.basename(jpg)
    base_name = os.path.splitext(base_name)[0]
    if base_name in raw_hash:
        jpg_base_name_with_ext = base_name + "." + jpg_extension
        new_jpg = waste_dir + "\\" + jpg_base_name_with_ext
        print "%s => %s" % (jpg, waste_dir)
        if os.path.exists(new_jpg):
            os.remove(jpg)
        else:
            os.rename(jpg, new_jpg)

2
হাই এবং ফটো.এসই তে আপনাকে স্বাগতম। তাতভীরের উত্তর থেকে আপনার উত্তর কীভাবে আলাদা ?
সারু লিন্ডেস্টেক

স্ক্রিপ্টটি কিছু অতিরিক্ত কাজ করে: সমস্ত উপ-ডিরেক্টরিতেও সন্ধান করে, জেপিজির অস্তিত্ব না থাকলে গন্তব্য বর্জ্য ডিরেক্টরি তৈরি করে এবং এটি বর্জ্য ডিরেক্টরিতে ইতিমধ্যে উপস্থিত থাকলে এটি সরানোর পরিবর্তে একটি জেপিজি সরিয়ে দেয় (চলন্ত ত্রুটিগুলি এড়ানো)
টমি

0

ম্যাক ওএস এক্সে কাজ করাতে, আমি পূর্ববর্তী উত্তরে "একই বিষয়বস্তু" জন্য একটি স্যানিটি চেক অনুপস্থিত ছিল। আমার কাছে বিভিন্ন ছবিতে নকলের নাম ছিল কারণ আমি আমার ক্যামেরায় চিত্রের কাউন্টার সক্ষম করতে ভুলে গিয়েছিলাম। এখানে আমার সংস্করণ, যা একই ক্যাপচার সময়ের জন্য এক্সআইএফ তথ্য চেক করে:

আপনার চালানো দরকার

sudo port install rmtrash exiv2

আপনি নিম্নলিখিত কমান্ড ব্যবহার করার আগে। এটি আমার নিকন ডি 90 এর ফাইলগুলির JPGসাথে তুলনা করার জন্য লেখা হয়েছিল NEF। আপনার প্রয়োজন অনুসারে ফাইল এক্সটেনশনগুলি সামঞ্জস্য করুন।

find . -name \*.NEF |sed s/\.NEF/.JPG/g | xargs find 2>/dev/null | \
xargs perl -e 'foreach(@ARGV) {my $jpg=$_;my $nef=s/\.JPG/.NEF/r; my $tjpg = `exiv2 -g Exif.Photo.DateTimeOriginal -pt $jpg`; my $nef=s/\.JPG/.NEF/r; my $tnef = `exiv2 -g Exif.Photo.DateTimeOriginal -pt $nef`; if($tjpg eq $tnef) {print "$jpg\n"}}' | \
xargs rmtrash

স্যানিটি পরীক্ষা না করে পুরো জিনিসটি খুব ছোট একটি লাইন হয়ে উঠবে:

find . -name \*.NEF |sed s/\.NEF/.JPG/g | xargs find 2>/dev/null | xargs rmtrash
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.