অস্থায়ী সময়ের জন্য চিত্রগুলির নাম পরিবর্তন করুন: অনন্য ফাইলের নাম তৈরি করুন


11

আমি যদি এক্সিটির মাধ্যমে ছবিগুলির নামটি এক্সাইফ তারিখের সময়টিতে রাখি তবে আমি নিম্নলিখিতগুলি করি:

find . -iname \*jpg -exec exiv2 -v -t -r '%Y_%m_%d__%H_%M_%S' rename {} \;

এখন এটি ঘটতে পারে যে ছবিগুলির ঠিক একই টাইমস্ট্যাম্প রয়েছে (সেকেন্ড সহ)। আমি কীভাবে ফাইলের নামটি স্বয়ংক্রিয়ভাবে অনন্য করতে পারি?

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

আমার প্রথম প্রয়াসটি কেবলমাত্র ফলাফলের ফাইলনামে আসল বেসনামটি রেখে যাওয়ার ছিল, তবে তারপরে কমান্ডটি উপরের অর্থে স্থিতিশীল থাকবে না।


1
টাইমস্ট্যাম্পটি বের করুন, ফাইলের নাম তৈরি করুন, বিদ্যমান ফাইলের নাম পরীক্ষা করুন, উপস্থিত থাকলে সংশোধন করুন (প্রত্যয় বা অনুরূপ যুক্ত করুন), তবে mvফাইলটি।
কুসালানন্দ

Exiv2 কমান্ডের একটি বিকল্প যুক্ত করে আরও সহজ উপায় আছে?
ছাত্র

সুতরাং exiftool ব্যবহার উত্তর ভালো কিছু হবে: exiftool '-filename<createdate' -d %Y_%m_%d__%H_%M_%S%%-c.%%le "-filemodifydate<createdate#" -r -progress .। হতে পারে আপনি আপনার মন্তব্যে কোনও উত্তরে পরিণত করতে পারেন।
ছাত্র

উত্তর:


17

আপনি চেষ্টা করতে পারেন jheadযা আছে বদলে আউট-অফ-বক্স (সঙ্গে a, b... zএবং @meuh উল্লেখ স্থায়িত্ব ইস্যু নেই একই তারিখ 27 ফাইলগুলিতে আপ যার ফলে সাফিক্স):

find . -iname '*jpg' -exec jhead -n%Y_%m_%d__%H_%M_%S {} +

বা ব্যবহার করে exiftool(ম্যান পৃষ্ঠায় উদাহরণস্বরূপ):

exiftool -ext jpg '-FileName<CreateDate' -d %Y_%m_%d__%H_%M_%S%%-c.%%e .

(এখানে %-cসংখ্যার প্রত্যয় হিসাবে শুরু হয়ে -)


3

exiv2(0.25 001900) এর আমার সংস্করণটি ইন্টারেক্টিভভাবে জিজ্ঞাসা করবে যখন ফাইলের নাম ইতিমধ্যে বিদ্যমান রয়েছে তখন কী করা উচিত।

exiv2: File `./2013_06_19__14_03_13.jpg' exists. [O]verwrite, [r]ename or [s]kip? 

বিকল্প যুক্ত করে -Fএটি পরিবর্তে নামের সাথে স্বয়ংক্রিয়ভাবে একটি অতিরিক্ত _1(বা _2ইত্যাদি) যুক্ত করবে।

Renaming file to ./2013_06_19__14_01_53_1.jpg, updating timestamp

কমান্ডটি দ্বিতীয়বার চালিত হলে এটি বলে:

This file already has the correct name

এবং কিছুই করে না, তবে অংশ থাকলে এটি বিভ্রান্ত হয় _1এবং এর নাম পরিবর্তন করে _2। এটি প্রতিটি রানে অ-ধ্বংসাত্মক উপায়ে এভাবে টগল করবে। আপনি যদি এটি পছন্দ করেন তবে এটিকে উপেক্ষা করতে পারেন বা findকোনও _অংশের সাথে তারিখের সাথে মেলে এমন ফাইলগুলি উপেক্ষা করতে আপনার প্যাটার্নটি পরিবর্তন করতে পারেন ।

উদাহরণস্বরূপ, তারিখের ফর্ম্যাটটির জন্য রেজেক্স প্যাটার্ন শুরু হয় [0-9]{4}_[0-9]{2}_...। সরলকরণের জন্য, আমি কেবল সেট থেকে 20 টি অক্ষরের মিশ্রণ সন্ধান করব 0..9এবং _এটি রেজেেক্স [0-9_]{20}। এটির জন্য প্রত্যেকে _কমপক্ষে 1 ডিজিটের সন্ধান করতে হবে _[0-9]{1,}.jpg। যেহেতু রেজেক্সকে পুরো পথটি মেলে, এবং কেবলমাত্র বেসনামটি নয়, ডিরেক্টরি সহ চূড়ান্ত রেজেক্সটি .*/[0-9_]{20}_[0-9]{1,}.jpg

সুতরাং আপনি যেমন একটি ব্যবহার ব্যবহার করতে পারেন:

find . -regextype posix-extended ! -iregex '.*/[0-9_]{20}_[0-9]{1,}.jpg' -iname '*.jpg' ...

1

এক্সিভ 2 এটি নিজেই পরিচালনা করতে পারে। আমি এক্সআইভি 2 ম্যানুয়ালটি না যাওয়া পর্যন্ত আমি এটিতে সাহায্যের জন্য অনেক সময় ব্যয় করেছি। -F বিকল্পটি এই সমস্যার সমাধান করে।

exiv2 -r'%Y_%m_%d__%H_%M_%S' -F *.jpg

ফাইলটি ইতিমধ্যে বিদ্যমান থাকলে এটি শেষে একটি _N সংযুক্ত করবে।

এবং যারা ফোল্ডার তৈরি করতে দেয় এমন বিকল্পের সন্ধান করছেন for

exiftool -r '-FileName<DateTimeOriginal' -d %Y/%m/%d/%%f%%-c.%%e *

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, ... ইত্যাদি এমনকি ছবিগুলি একই দ্বিতীয় স্থানে নেওয়া হয়েছিল, মূল ফটো সিরিয়াল নম্বরটি পার্থক্য তৈরি করবে make

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