วิธีการลบไฟล์ JPG แต่ถ้าไฟล์ RAW ที่ตรงกันอยู่เท่านั้น?


18

รูปต้น (Canon G2) ของฉันคือ JPG ทั้งหมด แต่เมื่อฉันได้กล้อง Nikon D90 ของฉันฉันเริ่มถ่ายในรูป JPG แล้วเปลี่ยนเป็น RAW + JPG และตอนนี้ฉันต้องการเปลี่ยนเป็น RAW เท่านั้น

ฉันมีภาพถ่ายหลายพันภาพบน HDD ของฉัน ภาพถ่ายอยู่ในไดเรกทอรีย่อย (ตามวันที่) ภายใต้ไดเรกทอรีเดียวที่เรียกว่านำเข้า

ฉันกำลังจะนำเข้ารูปภาพเหล่านี้ทั้งหมดลงใน Lightroom 3.0 แต่ฉันต้องการลบไฟล์ JPG ทั้งหมดแต่เฉพาะที่มีไฟล์ RAW ที่สอดคล้องกันอยู่แล้ว (เช่นฉันไม่ต้องการเก็บไฟล์ JPG และ RAW เวอร์ชันเดียวกันไว้อีกต่อไป) ไฟล์).

ถ้าฉันสามารถทำได้อย่างง่ายดายภายใน Lightroom (หลังจากนำเข้าทุกอย่างรวมถึงไฟล์ JPG ที่ซ้ำกัน) ที่ยอดเยี่ยม มันจะเป็นไรถ้ามีวิธีที่ง่ายในการทำเช่นนี้ก่อนที่จะนำเข้าไฟล์ (แต่หวังว่าสิ่งนี้จะไม่เกี่ยวข้องกับการเยี่ยมชมทุกไดเรกทอรีที่ค้นหาชื่อไฟล์ที่มีนามสกุล JPG และ NEF ทั้งสอง)

ไม่มีใครรู้วิธีการทำเช่นนี้ (ใน Lightroom หรือด้วยเครื่องมือ / สคริปต์ใน Windows)?


ไฟล์ jpg และไฟล์ RAW ทั้งหมดของคุณมีสตริงเดียวกันอย่างน้อยที่สุด (สามารถเพิ่มอักขระอื่นใน) เช่น IMG_1234_portrait_picture.jpg & IMG_1234.CR2
dpollitt

ฉันคิดว่าคู่ JPG / NEF ทั้งหมดของฉันมีชื่อไฟล์เหมือนกันทั้งหมด (ยกเว้นนามสกุล)
seanmc

3
ฉันจะลงคะแนนเพื่อเลื่อนนี้เพื่อกองมากเกินที่คุณควรจะได้คำตอบภายในเวลาไม่กี่นาที =)
อานนท์

1
@anon: สิ่งนี้อยู่ใน StackOverflow อย่างไร นี่เป็นคำถามในหัวข้อที่แน่นอนที่สุดที่นี่เนื่องจากเกี่ยวข้องกับเครื่องมือจัดการรูปภาพและเครื่องมือแก้ไขรูปภาพ ด้านนอกของการอ้างอิงวงกับสคริปต์ ... สิ่งนี้ไม่เกี่ยวกับการเขียนโปรแกรม
jrista

2
ฉันลงคะแนนเพื่อปิดคำถามนี้เป็นนอกหัวข้อเพราะนี่ไม่ได้เกี่ยวกับการถ่ายภาพจริงๆมันเกี่ยวกับการจัดการไฟล์ที่เพิ่งจะเป็นรูปถ่าย คำถามและคำตอบจะเหมือนกันหากไฟล์สองประเภทที่สงสัยเป็นไฟล์ประเภทอื่นที่สามารถแปลจากแบบฟอร์มหนึ่งเป็นอีกแบบหนึ่งได้เช่นไฟล์. doc และ. pdf เป็นต้น
xiota

คำตอบ:


24

บนWindowsไปที่โฟลเดอร์และเรียกใช้สิ่งนี้ในพร้อมท์คำสั่ง:

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

โดยพื้นฐานแล้วจะผ่านโฟลเดอร์ปัจจุบันเรียกใช้ไฟล์ NEF และลบ JPG หากมี มันจะละเว้นข้อผิดพลาดใด ๆ หาก JPG ไม่อยู่ที่นั่น

ถ้าคุณต้องการให้โฟลเดอร์ย่อยรวม/sอยู่ในdirคำสั่ง


3
สมบูรณ์แบบขอบคุณ! แน่นอนก่อนที่ฉันจะวิ่งครั้งแรกฉันเปลี่ยน "del" เป็น "echo" จากนั้นฉันก็วิ่งไปที่ "ช่วยให้" เพื่อทำความเข้าใจว่ามันกำลังทำอะไรอยู่ เห็นได้ชัดว่านานมากแล้วที่ฉันได้ดูคำสั่งสคริปต์พร้อมรับคำสั่งเพราะฉันไม่รู้ว่าคำสั่ง "for" มีตัวเลือกมากมาย
seanmc

ไม่มีปัญหา! ขณะที่ฉันทดสอบฉันใช้ "echo" =) เพื่อดูผลลัพธ์เพิ่มเติมให้ลบ "2> nul" ฉันตั้งใจจะทำอะไรแบบนี้กับไฟล์ NEF / JPG ของฉันและนี่เป็นโอกาสที่สมบูรณ์แบบ
anon

7

นี่คือรุ่นที่ปรับเปลี่ยนสคริปต์ Python Tomy ของ แตกต่าง:

  • อนุญาตให้ใช้ส่วนขยายดิบได้หลายรายการ
  • ลบ 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 แปลก (ดูเหมือนว่า mac ของฉันเปิดไฟล์. py พร้อม ImageMagick)
therealmarv

เพียง FYI: .jPgมันก็ดูเหมือนว่ามันจะไม่ทำงานเมื่อไฟล์ที่มีชื่อจริงๆ มันยังไม่ทำงานเมื่อไฟล์อยู่ในดิสก์ภายนอกและไดเรกทอรีเสียเช่นใน/homedir
therealmarv

การแก้ไขบางอย่าง: gist.github.com/therealmarv/ec603bd4a91d51092a18
therealmarv

@therealmarv: จริงๆแล้วสิ่งที่เกิดขึ้นกับ ImageMagick คือสคริปต์กำลังถูกเปิดในเชลล์ไม่ใช่ ImageMagick แต่ "import" เป็นชื่อของเครื่องมือ ImageMagick
สูงสุด

6

นี่คือสคริปต์ Pythonที่จะย้าย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
  • สร้าง Library ที่ว่างเปล่า
  • จากเมนูหลัก Lightroom เลือกแก้ไข> การตั้งค่า (Windows) หรือ Lightroom> การตั้งค่า (Mac OS)
  • ในการตั้งค่าทั่วไปยกเลิกการเลือก "จัดการไฟล์ JPEG ถัดจากไฟล์ดิบเป็นภาพถ่ายแยก"
    • นี่ควรเป็นค่าเริ่มต้น
  • นำเข้าไฟล์ทั้งหมดของคุณ (คุณสามารถเลือกโฟลเดอร์ย่อยค้นหา) เพื่อบอกให้ย้ายไปยังตำแหน่งใหม่
  • ไฟล์ JPG ที่มีไฟล์ RAW จะอยู่ในตำแหน่งเดิมเพื่อให้คุณลบออก

ตามที่ฉันเข้าใจแล้วรูปขนาดย่อใน Lightroom อาจบอกว่า RAW + JPG แต่ JPG นั้นไม่ได้ถูกจัดเก็บหรือเข้าถึงได้ แต่อย่างใด

คุณยังสามารถเขียนสคริปต์แบทช์ที่เรียบง่ายด้วยภาษาการเขียนโปรแกรมใด ๆ


2

ฉันชอบbash script สำหรับ OS X (โดยT.Toivonen ) แต่ฉันพบว่ามีปัญหาเล็กน้อย

  • มันไม่ชอบชื่อไดเรกทอรีซึ่งมีช่องว่าง ต้องมีการจัดการคำสั่ง find ที่แตกต่างกันเล็กน้อย

  • สคริปต์ดั้งเดิมใช้งานได้เฉพาะกับส่วนขยายที่เล็กกว่าเท่านั้น ฉันได้ปรับปรุงเล็กน้อยส่วนหนึ่งของสคริปต์เพื่อบัญชีสำหรับส่วนขยายที่เป็นตัวพิมพ์ใหญ่เช่นกัน โปรดทราบว่ามันจะยอมรับเฉพาะDNG+JPGหรือdng+jpgคู่และมันจะไม่สนใจอยู่รวมกันใด ๆ เช่นหรือDNG+jpgDnG+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

คำถามถูกติดแท็ก "หน้าต่าง" เพื่อให้คุณสามารถบอกได้ว่าสิ่งนี้สามารถทำงานในระบบ Windows ทั่วไปได้อย่างไร ตัวอย่างเช่นฉันใช้ Cygwin (และฉันวางแผนที่จะดูคำตอบนี้ได้ดีขึ้นเมื่อฉันอยู่บนเดสก์ท็อปเพื่อเปลี่ยนพฤติกรรมเล็กน้อย)
Chris H

2

นี่คือทางออกสำหรับbash(Linux หรือ Mac OS X) ใน Windows คุณสามารถติดตั้งCygwinbashที่จะได้รับสำเนาของ

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(Linux) เช่นเดียวกับคำตอบของ Ben Pingilleyคุณสามารถติดตั้งCygwinเพื่อรับ bash บน 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

นี่คือปัญหาของฉันในเรื่องนี้ ความคิดที่ดีมากมายมาจากสคริปต์ก่อนหน้าที่กล่าวถึงที่นี่

นี้เป็นสคริปต์ทุบตีสำหรับ OS X ค้นหาไฟล์ที่มีอยู่ด้วยชื่อไฟล์พื้นฐานและ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สคริปต์สำหรับMac OS X มันอาจทำงานบน Linux ด้วยการเปลี่ยนแปลงบางอย่าง

#!/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

ผมเขียนต่อไปนี้สคริปต์ Python เมื่อเทียบกับสคริปต์ของ 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อย่างไร
Saaru Lindestøkke

สคริปต์ทำงานพิเศษบางอย่าง: ดูในไดเรกทอรีย่อยทั้งหมดสร้างไดเรกทอรีไฟล์ขยะปลายทางสำหรับ jpg หากไม่มีและลบ jpg แทนที่จะย้ายหากมีอยู่ในไดเรกทอรีเสีย (หลีกเลี่ยงข้อผิดพลาดในการย้าย)
Tomy

0

ทำงานกับMac OS Xฉันขาดสติตรวจสอบสติ "เนื้อหาเดียวกัน" ในคำตอบก่อนหน้านี้ ฉันมีชื่อซ้ำกันสำหรับภาพที่แตกต่างกันเพราะฉันลืมเปิดใช้งานตัวนับภาพในกล้องของฉัน นี่คือเวอร์ชันของฉันที่ตรวจสอบข้อมูล EXIF ​​สำหรับเวลาการจับภาพที่เท่ากัน:

คุณต้องวิ่ง

sudo port install rmtrash exiv2

ก่อนที่คุณจะสามารถใช้คำสั่งต่อไปนี้ มันถูกเขียนขึ้นเพื่อเปรียบเทียบJPGกับNEFไฟล์จาก Nikon D90 ของฉัน ปรับนามสกุลไฟล์ตามที่คุณต้องการ

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.