JPG फ़ाइलों को कैसे हटाएं, लेकिन केवल अगर मिलान RAW फ़ाइल मौजूद है?


18

मेरी शुरुआती (Canon G2) तस्वीरें सभी JPG हैं, लेकिन जब मुझे अपना Nikon D90 मिला, तो मैंने शुरुआत में JPG में शूटिंग की, फिर रॉ + JPG में स्विच किया, और अब मैं केवल रॉ में स्विच करना चाहूंगा।

मेरे पास HDD पर सचमुच हजारों तस्वीरें हैं। तस्वीरें आयात नाम की एक निर्देशिका के तहत उप-निर्देशिकाओं (तिथि के अनुसार) में हैं।

मैं इन सभी तस्वीरों को लाइटरूम 3.0 में आयात करने वाला हूँ, हालाँकि, मैं सभी JPG फ़ाइलों को हटाना चाहता हूँ, लेकिन केवल जहाँ पहले से ही RAW फ़ाइल है (यानी। मैं अब उसी के JPG और RAW संस्करण नहीं रखना चाहता। फ़ाइल)।

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

क्या किसी को ऐसा करने का तरीका पता है (लाइटरूम में, या विंडोज में कुछ टूल / स्क्रिप्ट के साथ)?


क्या आपकी सभी jpg फ़ाइलें और RAW फ़ाइलें एक ही स्ट्रिंग पर हैं (अन्य वर्णों को भी जोड़ा जा सकता है)? जैसे IMG_1234_portrait_picture.jpg और IMG_1234.CR2।
dpollitt

मुझे लगता है कि मेरे सभी JPG / NEF जोड़े में एक ही फ़ाइल नाम (एक्सटेंशन को छोड़कर) है।
शंकुम

3
मैं इसे स्टैक ओवरफ्लो में स्थानांतरित करने के लिए मतदान करूंगा, जहां आपको मिनट = के भीतर जवाब मिलना चाहिए)
anon

1
@anon: यह वास्तव में StackOverflow पर कैसे होता है? यह यहाँ निश्चित रूप से एक ऑन-टॉपिक प्रश्न है, क्योंकि यह इमेज मैनेजमेंट और फोटो एडिटिंग टूल्स से संबंधित है। स्क्रिप्ट के संदर्भ के बाहर ... इसका प्रोग्रामिंग से कोई लेना-देना नहीं है।
jrista

2
मैं इस प्रश्न को ऑफ-टॉपिक के रूप में बंद करने के लिए मतदान कर रहा हूं क्योंकि यह वास्तव में फोटोग्राफी के बारे में नहीं है, यह फाइलों को प्रबंधित करने के बारे में है जो सिर्फ तस्वीरों के लिए होता है। यदि दो प्रकार की फाइलें किसी अन्य प्रकार की फाइलें थीं, जिनका एक रूप से दूसरे रूप में अनुवाद किया जा सकता हो, जैसे .doc और .pdf फाइलें, आदि
xiota

जवाबों:


24

पर विंडोज , फ़ोल्डर पर जाएँ, और एक कमांड प्रॉम्प्ट में इस चलाएँ:

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

मूल रूप से, यह वर्तमान फ़ोल्डर से गुजरता है, एनईएफ फाइलों के माध्यम से चलता है, और यदि मौजूद है तो जेपीजी को हटा देता है। यह किसी भी त्रुटि को नजरअंदाज करता है यदि JPG नहीं है।

यदि आप सबफ़ोल्डर चाहते हैं /s, तो dirकमांड में शामिल करें ।


3
बहुत बहुत धन्यवाद! बेशक, जब मैंने इसे पहली बार चलाया, मैंने "डेल" को "इको" में बदल दिया। फिर मैं यह समझने के लिए "मदद" के लिए दौड़ा कि यह क्या कर रहा था। यह स्पष्ट रूप से एक लंबा समय रहा है क्योंकि मैंने कमांड प्रॉम्प्ट स्क्रिप्टिंग को देखा है, क्योंकि मुझे नहीं पता था कि "फॉर" कमांड में इतने सारे विकल्प थे।
शॉनमेक

कोई दिक्कत नहीं है! जैसा कि मैं परीक्षण कर रहा था, मैंने भी "इको" =) का उपयोग किया। अधिक आउटपुट देखने के लिए, "2> nul।" मैं अपनी NEF / JPG फ़ाइलों के लिए ऐसा कुछ करने का अर्थ रखता हूं, और यह सही मौका था।
अनॉन

7

यहाँ टॉमी के पाइथन स्क्रिप्ट का एक संशोधित संस्करण है । अंतर:

  • कई कच्चे एक्सटेंशन की अनुमति दी
  • यदि जोड़े एक ही फ़ोल्डर में हैं तो jpg को हटा दें (किसी अन्य फ़ोल्डर में कच्ची फ़ाइल की तरह नाम वाले jpg के आकस्मिक निष्कासन से बचें)
  • असंवेदनशील मामला

#!/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को शुरुआत में जोड़ना चाहिए । अन्यथा मुझे अजीब ImageMagick त्रुटियाँ थीं (लगता है कि मेरी मैक खुली हुई है। ImageMagick के साथ .py फाइलें)
therealmarv

बस FYI करें: यह भी लगता है कि यह काम नहीं करता है जब फ़ाइलों को वास्तव में नाम दिया जाता है .jPg। यह भी काम नहीं करता है जब फाइलें बाहरी डिस्क पर होती हैं और /homedir में वेस्ट डाइरेक्टरी जैसे ।
therealmarv


@ एथेलेमारव: वास्तव में इमेजमैजिक के साथ जो हो रहा है वह यह है कि स्क्रिप्ट को शेल में खोला जा रहा है, इमेजमैजिक नहीं, बल्कि "इम्पोर्ट" एक इमेजमैजिक टूल का नाम है।
अधिकतम

6

यहां एक पायथन स्क्रिप्ट है जो JPGफ़ाइलों को स्थानांतरित करती है जब कोई भी संबंधित RAWफ़ाइल मौजूद नहीं है। मैक ओएस एक्स पर उपयोगी !

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
  • एक खाली लाइब्रेरी बनाएं
  • लाइटरूम मुख्य मेनू से, संपादन> प्राथमिकताएं (विंडोज) या लाइटरूम> प्राथमिकताएं (मैक ओएस) चुनें।
  • सामान्य प्राथमिकताओं में "अलग तस्वीरों के रूप में कच्चे फाइलों के बगल में जेपीईजी फाइलें समझो" अचयनित करें
    • यह डिफ़ॉल्ट होना चाहिए।
  • अपनी सभी फ़ाइलों को आयात करें (आप खोज सबफ़ोल्डर्स का चयन कर सकते हैं), इसे एक नए स्थान पर स्थानांतरित करने के लिए कह रहे हैं
  • जिन JPG फ़ाइलों में RAW फाइलें हैं उन्हें हटाने के लिए मूल स्थान पर छोड़ दिया जाएगा

जैसा कि मैं इसे समझता हूं, लाइटरूम में थंबनेल RAW + JPG कह सकता है, लेकिन JPG वास्तव में किसी भी तरह से संग्रहीत या सुलभ नहीं है।

आप किसी भी प्रोग्रामिंग भाषा के साथ एक बहुत ही सरल बैच स्क्रिप्ट भी लिख सकते हैं।


2

मुझे OS X के लिए बैश स्क्रिप्ट पसंद है ( T.Toivonen द्वारा ), लेकिन मैंने देखा है कि कुछ मुद्दे हैं।

  • यह मेरी निर्देशिका नामों को पसंद नहीं करता था, जिसमें रिक्त स्थान होते हैं। इसके लिए खोज कमांड की थोड़ी अलग हैंडलिंग की आवश्यकता थी।

  • मूल स्क्रिप्ट केवल लोअरकेस एक्सटेंशन के लिए काम करती है। मैंने स्क्रिप्ट के उस हिस्से को थोड़ा विस्तार दिया है जो एक्सटेंशन के साथ-साथ अपरकेस में भी है। ध्यान दें, यह केवल जोड़े DNG+JPGया dng+jpgजोड़े को स्वीकार करता है , और यह किसी भी संयोजन को अनदेखा करेगा जैसे कि DNG+jpgया DnG+JpG

  • मूल समाधान केवल एक ही wastedirस्थान प्रस्तावित करता है , जबकि मेरा फिक्स प्रत्येक निर्देशिका शाखा पर एक उपनिर्देशिका बनाने की अनुमति देता है क्योंकि यह यात्रा करता है। आप लूप से पहले डायरेक्टरी के एक नाम को परिभाषित करते हैं।

  • मुझे यह देखना पसंद है कि क्या चल रहा है, खासकर जब mvया rmकमांड का उपयोग किया जाता है;)

अंतरिक्ष की खातिर मैं स्क्रिप्ट का केवल अंतिम भाग दिखा रहा हूं, ए 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(लिनक्स या मैक ओएस एक्स) के लिए एक समाधान है । विंडोज पर, आप कॉपी करने के लिए Cygwin स्थापित कर सकते हैं 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

यहाँ (Linux) bashका उपयोग कर एक और संस्करण है find। साथ के रूप में बेन Pingilley का जवाब है, तो आप स्थापित कर सकते हैं Cygwin विंडोज पर बैश मिलता है।

#!/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एक उपयोगिता है जो फ़ाइलों को ट्रैश में ले जाती है, उन्हें एकमुश्त हटाने के बजाय। आप इसे MacPorts से प्राप्त कर सकते हैं:

sudo port install rmtrash

यदि आप उससे बचना चाहते हैं, तो बस rmtrashस्क्रिप्ट में बदलें rm, जो तुरंत JPGफ़ाइलों को हटा देगा ।


1

मैंने निम्नलिखित पायथन लिपि लिखीTtaveira की स्क्रिप्ट की तुलना में , यह कुछ अतिरिक्त काम करता है।

  • उप-निर्देशिकाओं में दिखता है।
  • गंतव्य अपशिष्ट निर्देशिका बनाता है।
  • हटाई गई त्रुटियों से बचने के लिए पहले से ही अपशिष्ट निर्देशिका में मौजूद फ़ाइलों को हटा देता है।

# 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
नमस्ते और Photo.SE में आपका स्वागत है। आपका उत्तर ttaveira के उत्तर से कैसे भिन्न है ?
सारू लिंडस्टोक

स्क्रिप्ट कुछ अतिरिक्त काम करती है: सभी उप-निर्देशिकाओं में भी दिखती है, अगर यह मौजूद नहीं है तो यह jpg के लिए गंतव्य अपशिष्ट निर्देशिका बनाता है और अगर यह पहले से ही अपशिष्ट निर्देशिका में मौजूद है, तो इसे स्थानांतरित करने के बजाय एक jpg को हटा देता है (चलती त्रुटियों से बचा जाता है)
टॉमी

0

मैक ओएस एक्स पर काम करते हुए , मुझे पिछले उत्तरों में "उसी सामग्री" के लिए एक स्वच्छता जांच याद आ रही थी। मेरे पास विभिन्न चित्रों के लिए डुप्लिकेट नाम थे क्योंकि मैं अपने कैमरे में छवि काउंटर को सक्षम करना भूल गया था। यहां मेरा संस्करण है, जो उसी कैप्चर समय के लिए EXIF ​​जानकारी की जांच करता है:

आपको दौड़ने की जरूरत है

sudo port install rmtrash exiv2

इससे पहले कि आप निम्न आदेश का उपयोग कर सकते हैं। यह मेरी Nikon D90 की फ़ाइलों के 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
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.