এক্সআইএফ ডেটার উপর ভিত্তি করে একাধিক ফটো এবং ভিডিওগুলির কীভাবে নামকরণ করবেন?


11

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

আমি এখন পর্যন্ত কেবলমাত্র নিম্নলিখিত নটিটিলাস স্ক্রিপ্টকে একত্রিত করতে পরিচালিত করেছি, যা আমি বিশ্বাস করি নিখুঁত:

for i in *.*
do
mv -i "$i" "$(exiftool -CreateDate "$i" | awk -F ': ' '{print $2}')_"$i"" 
done

এই নামকরণের পদ্ধতিটিতে আমি যা পছন্দ করি না তা হ'ল এক্সআইএফ তারিখ এবং সময় স্ট্যাম্পগুলিতে ব্যবহৃত কলন (যেমন "2013: 09: 03 20: 55: 09_IMG_0108.JPG") যা পরে এই ফাইলগুলি অন্য পরিবেশে স্থানান্তর করার সময় সমস্যা তৈরি করতে পারে ( যেমন উইন্ডোজ)।

এই কমান্ডটি ( এক্সিফটোলের পরিবর্তে এক্সিভি 2 ব্যবহার করে ) তারিখ এবং সময় স্ট্যাম্পগুলির সুবিধার্থে ম্যানিপুলেশন সক্ষম করে তবে এর অসুবিধাটি হ'ল এটি ভিডিও (যেমন এমওভি) ফাইলগুলিতে কাজ করে না :

exiv2 -k -r '%Y-%m-%d_%H-%M-%S_:basename:' rename "$i"

সুতরাং আমি আশা করছি যে আরও ভাল সমাধান নিয়ে কেউ আসতে পারেন। এটি এমনকি যদি মূল ফাইলের নাম এবং এক্সটেনশানগুলি লোয়ারকেসে রূপান্তরিত করতে সক্ষম হয় তবে এটি যাদু হবে!


নীচের দুর্দান্ত উত্তরের পাশাপাশি আপনার পাইরেনমারও পরীক্ষা করা উচিত । ভিডিও ফাইলগুলির সাথে এটি ব্যবহার করার আমার কোনও অভিজ্ঞতা নেই, (তাদের কাছে কি এক্সআইএফ ডেটা আছে?) তবে আমি বলতে পারি এটি ফটোগুলির জন্য দুর্দান্ত। এটি ফাইল এক্সটেনশনগুলি পাশাপাশি ছোট হাতের অক্ষরেও পরিবর্তন করতে পারে।
টম ব্রসম্যান

উত্তর:


6

এই নামকরণের পদ্ধতিটিতে আমি যা পছন্দ করি না তা হ'ল এক্সআইএফ তারিখ এবং সময় স্ট্যাম্পগুলিতে ব্যবহৃত কলন (যেমন "2013: 09: 03 20: 55: 09_IMG_0108.JPG") যা পরে এই ফাইলগুলি অন্য পরিবেশে স্থানান্তর করার সময় সমস্যা তৈরি করতে পারে ( যেমন উইন্ডোজ)।

আপনি নামকরণের স্কিমটি sedচালিয়ে যেতে পারেন , ড্যান্স এবং স্পেসগুলি দিয়ে আন্ডারস্কোর সহ কলোনগুলি প্রতিস্থাপন করতে, যেমন:

mv -i "$i" "$(exiftool -CreateDate "$i" | awk -F ': ' '{print $2}' | sed -e 's/:/-/g' -e 's/ /_/g')_$i"

পুরো জিনিসটি ছোট হাতের অক্ষরে তৈরি করার জন্য আপনি ব্যবহার করতে পারেন rename:

rename 's/(.*)/\L$1/' file.JPG
##  or
rename 's/(.*)/\L$1/' *.*

অথবা আপনি আপনার স্ক্রিপ্টের মধ্যে এটি ব্যবহার করে এটি করতে পারেন sed:

j=$(echo "$i" | sed -e 's/\(.*\)/\L\1/')

... এবং তারপরে আপনার লাইনের $jফাইনালের জায়গায় ভেরিয়েবলটি ব্যবহার করুন । এই সিড উপায়টি কিছুটা বেশি পোর্টেবল (যদি তা আপনার পক্ষে গুরুত্বপূর্ণ) কারণ বিভিন্ন লিনাক্স ডিস্ট্রো-র বিভিন্ন নাম পুনরায় নামকরণ করতে পারে, তবে সেড সর্বজনীন।$imv

অথবা, বিকল্প হিসাবে, স্ক্রিপ্টটি trপরিবর্তে পরিবর্তে ব্যবহার করে শুরুতে ছোট হাতের অক্ষরে ফাইলের নাম রূপান্তর সম্পাদন করতে পারে :

for arg 
do
  tmp="$(echo "$arg" | tr '[A-Z]' '[a-z]')"
  mv -i "$arg" "$(exiftool -CreateDate "$arg" | awk -F ': ' '{print $2}' | sed -e 's/:/-/g' -e 's/ /_/g')_$tmp"
done

বিভিন্ন ফাইল প্রকারের জন্য কিছুটা পৃথক কমান্ড সম্পাদন করতে, এই স্ক্রিপ্টে ব্যাশ কেস স্টেটমেন্ট ব্যবহার করা যেতে পারে। উদাহরণ স্বরূপ:

#! /usr/bin/env bash
for filename in ./*
do
  tmp="$(echo "$filename" | tr '[A-Z]' '[a-z]')"
  case "$filename" in
    *.MOV|*.mov) 
      mv -i "$filename" "$(exiftool -a -s -CreateDate-tur "$filename" | awk -F ': ' '{print $2}' | sed -e 's/\-[0-9][0-9]\:00//g' -e 's/\+[0-9][0-9]\:00//g' -e 's/:/-/g' -e 's/ /_/g')_$tmp"
      ;;
    *.JPG|*.jpg)
      mv -i "$filename" "$(exiftool -a -s -CreateDate "$filename" | awk -F ': ' '{print $2}' | sed -e 's/:/-/g' -e 's/ /_/g')_"$tmp""
      ;;
    *)
      echo 'Not a *.jpg or a *.mov!'
      ;;
  esac
done

এই উদাহরণে, CreateDate আছে যে MOV ফাইলের পুনঃনামকরনের পরে অথবা কোন JPG ফাইল উপস্থিত করার পূর্বে আরেকটি (-tur) এক্জিফ তথ্য ব্যবহার করে এবং সরিয়েছে সেই সময় পার্থক্য প্রত্যয় দ্বারা স্থায়ী হয় ঘন্টার যে কোন সংখ্যার টাইমস্ট্যাম্প, এবং এটি পরিবর্তন করার প্রয়োজন হতে পারে -tur অংশ সিস্টেমে অবস্থান সেট অনুযায়ী।


দুর্ভাগ্যক্রমে আমি কীভাবে ফাইলনামগুলিকে ছোট হাতের অক্ষরে রূপান্তর করতে পারি তা যেমন প্রস্তাবিত হয় (উপরের লাইনটি সন্নিবেশ করানো এবং শেষ $iপর্যন্ত $jকিছু না করার জন্য পরিবর্তন করা )। পরিবর্তে, আমি শুরুতে লোয়ারকেসে ফাইলের নাম রূপান্তর প্রবেশ করিয়ে দিয়েছিলাম এবং এটিকে আপনার উত্তরের শেষের দিকে অন্য বিকল্প হিসাবে (যা আমার পক্ষে কমপক্ষে কাজ করেছিল) হিসাবে যুক্ত করার স্বাধীনতা নিয়েছিল যাতে আমি আপনার উত্তর গ্রহণ করতে পারি। অবশ্যই আপনি নিজের ইচ্ছে মত উত্তরটি আরও সম্পাদনা করতে পারবেন।
সাদি

@ সাদি তাজা চোখ দিয়ে এটিকে দেখছেন, আমি সেড কমান্ডটি দিয়ে কী ভুল করছি তা দেখতে পাচ্ছি। সর্বশেষতম সংস্করণটি কাজ করবে, যদিও অবশ্যই যদি টিআর পদ্ধতিটি আপনার পক্ষে কাজ করে তবে এটি ঠিক আছে (আমার কাছে একটি ছোঁকা সন্দেহ রয়েছে যে টিআর
সলিউশনটি

ধন্যবাদ. আমি অবাক হই যে আপনি এমওভি ফাইলের জন্য একটি কমান্ড এবং অন্যদের জন্য লাইন বরাবর অন্যদের জন্য এই স্ক্রিপ্টটি আরও উন্নত করতে আমাকে সহায়তা করতে পারেন: অন্যথায় ভাল কারণটি হ'ল আমি বুঝতে পেরেছি যে আমার এমওভি ফাইলগুলিতে (আইপ্যাড থেকে) "ক্রিয়েটডিট" স্ট্যাম্পটি অবাকভাবে +4 ঘন্টা সময় নিয়েছে এবং আমাকে ফটো এবং ভিডিওগুলির সঠিক ক্রম অর্জনের জন্য তাদের জন্য আরও একটি বিকল্প (ক্রিয়েটডিট-টুর) ব্যবহার করতে হবে ।
সাদি

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

অসংখ্য ধন্যবাদ!!! আপনি যদি কিছু মনে না করেন তবে আমি উত্তরের সাথে এই বিকল্পটিও যুক্ত করব।
সাদি

13

আমাকে আমার ফটোগুলির নাম পরিবর্তন করতে হবে এবং এই প্রশ্নটি এখানে পেয়েছি - আমি সবেমাত্র জানতে পেরেছি যে exiftoolএটি স্থানীয়ভাবে পরিচালনা করে:

Http://www.sno.phy.queensu.ca/~phil/exiftool/filename.html থেকে

exiftool -d %Y-%m-%d_%H-%M-%S%%-c.%%e "-filename<CreateDate" DIR 

আপনি যদি মূল ফাইলের নামটি ধরে রাখতে চান এবং এক্সটেনশান লোয়ার কেস লিখতে চান:

exiftool -d %Y%m%d_%H%M%S%%-c-%%f.%%le "-filename<DateTimeOriginal" [.|DIR]

লোয়ারকেসগুলিতে পুরো ফাইলের নামের সাথেও একই কাজ করে:

exiftool -d %Y%m%d_%H%M%S%%-c-%%lf.%%le "-filename<DateTimeOriginal" [.|DIR]

ডিআইআর অবশ্যই ফোল্ডার হতে হবে যেখানে ফটো বরাদ্দ করা হয়। যদি আমরা ফোল্ডারে যেখানে ইতিমধ্যে কমান্ডটি কার্যকর করতে চাইলে একটি টার্মিনাল খোলা হয়ে থাকে, তার জন্য আমাদের ডিআইআর প্রতিস্থাপন করতে হবে। এবং যদি আপনি উপসর্গ যোগ করতে চান তবে ফাইলনামে (অর্থাত্ IMG_) এটি অবশ্যই কোনও উদ্ধৃতি ছাড়াই তারিখ শৃঙ্খলের আগে sertedোকাতে হবে। এখানে একটি উদাহরণ: exiftool -d IMG_% Y% m% d_% H% M% S %% - c। %% e "-Filename <CreateDate"।
নর্থর

2

আমি জানি আপনি বলেছিলেন যে আপনি একটি স্ক্রিপ্ট পছন্দ করেছেন, তবে আপনি যদি কোনও নিখরচায় জাভা অ্যাপ্লিকেশনটির জন্য খোলা থাকেন তবে আপনি আমোক এক্সিফ সার্টার ব্যবহার করতে পারেন

এখানে চিত্র বর্ণনা লিখুন


1

আমি krenameএই জন্য ব্যবহার করব । এটা

  • লাইভ প্রাকদর্শন দেখায়
  • পূর্বাবস্থায় ফিরে আসার অনুমতি দেয়
  • পুনরাবৃত্তির সাথে দির যেতে পারেন
  • একাধিক নামকরণ নিদর্শন অনুমতি দেয়
  • নিদর্শনগুলি গ্লোব এবং regexps অনুমতি দেয়
  • ইতিহাস মনে আছে

0

পাইরেণার আমার নতুন ইনস্টল করা উবুন্টু 16.04 এ কাজ করবে না, সুতরাং এই সমস্যাটি সমাধান করার জন্য আমাকে আরও একটি উপায় খুঁজে বের করতে হবে।

আমার কাছে একটি ফোল্ডারে IMG_0001.JPG, IMG_0002.JPG, ... এর মতো ফাইল রয়েছে। এই সাইটটি দেখুন, /programming/917260/can-var-parameter-expansion-expressions-be-nested-in-bash

প্রথমে "exiv2" ইনস্টল করুন এবং আমি নিম্নলিখিত কমান্ড লাইনটি লিখেছি:

img in s (ls *। [জেজে] [পিপি] [জিজি] 2> / দেব / নাল); do exiv2 -r '% Y% m% d_% H% M% S _' "$ (tmp = $ {img %%। *}; প্রতিধ্বনি $ mp tmp ## * _})" পুনরায় নামকরণ "$ img"; সম্পন্ন

আউটপুট ফাইলের নামগুলি হ'ল YYYYMMDD_HHMMSS_0001.JPG, YYYYMMDD_HHMMSS_0002.JPG, ... ইত্যাদি এমনকি ছবিগুলি একই সেকেন্ডে তোলা হয়েছিল, মূল ফটো সিরিয়াল নম্বরটি পার্থক্য তৈরি করবে।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.