যথাযথ বাছাইয়ের জন্য একসাথে কয়েকশ ফাইলের নামকরণ


23

আমি ফাইল একটি টন, মত সব নামে কাপড় আছে 1.jpg, 2.jpg, 3.jpg, ইত্যাদি পর্যন্ত 1439.jpg, কিন্তু, আমি একটি সমস্যা আমার প্রকল্প এবং alphabetizing এক সঙ্গে আছে। এটি সাধারণত অনুক্রমে যাব 1.jpg, 10.jpg, 11.jpgইত্যাদি।

আমার যা দরকার তা হল ফাইলগুলির নামকরণের কিছু উপায় যাতে তারা বিন্যাসে থাকে যেমন 00001.jpgসমস্ত উপায় 01439.jpg

আমি কীভাবে দ্রুত এবং দক্ষতার সাথে এটি করতে সক্ষম হব?


আপনি যেটি সন্ধান করছেন তা হ'ল "প্রাকৃতিক বাছাই", সম্ভবত এটি সহায়তা করে: Askubuntu.com
ফ্যাবিয়ান

উত্তর যে সরাসরি উত্তর না? ls -v unix.stackexchange.com/questions/33909/…
WernerCD

+1 কারণ আমি এটি করতে ব্যর্থ চেষ্টা করেছি pyrenamer
পার্টো

@ ফ্যাবিয়ান ব্ল্যাচস্মিড্ট, আমার এমন একটি প্রোগ্রাম দরকার যা নটিলাস বা এর মতো নয়। এটি একটি পৃথক প্রকল্পের জন্য।
কাজ ওল্ফ

আমি মনে করি আপনি প্রাকৃতিক বাছাই বাস্তবায়ন সম্পর্কে চিন্তাভাবনা করেছেন? তবে আমি বুঝতে পেরেছি, ফাইলগুলির নামকরণ করা বেশ সহজ এবং যদি এটি কাজ করে তবে দুর্দান্ত :)
ফ্যাবিয়ান ব্ল্যাচসমিট

উত্তর:


35

উবুন্টু নামে একটি স্ক্রিপ্ট আসে rename। এটি কেবল সামান্য পার্ল স্ক্রিপ্টটিতে বেশ কয়েকটি শক্তিশালী বাল্ক-নামকরণ বৈশিষ্ট্য রয়েছে তবে প্রতিস্থাপনের সময় পার্ল চালানোর পক্ষে সক্ষমতা সেরা (এই ক্ষেত্রে)। ফলাফলটি একটি সত্যই কমপ্যাক্ট সমাধান:

rename 's/\d+/sprintf("%05d", $&)/e' *.jpg

এটি printfএখানে অন্যান্য স্টাইলের উত্তরগুলির মতো, তবে এটি আমাদের জন্য পরিচালিত। উপরের কোডটি 5-সংখ্যার সংখ্যার জন্য (শীর্ষস্থানীয় জিরোগুলির একটি চলক সংখ্যাসহ) জন্য।

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

দ্রষ্টব্য: এটি সম্পূর্ণরূপে বহনযোগ্য নয়। প্যাকেজ rename.ulথেকে অনেক বিতরণ util-linuxতাদের ডিফল্ট renameবাইনারি হিসাবে ব্যবহার করে । এটি একটি উল্লেখযোগ্যভাবে স্তব্ধ বিকল্প (দেখুন man rename.ul) যা উপরেরটি বুঝতে পারে না। আপনি যদি এমন প্ল্যাটফর্মে পছন্দ করতে চান যা পার্লের নাম পরিবর্তন করে না ব্যবহার করে তবে কীভাবে প্রথমে এটি ইনস্টল করতে হয় তা সন্ধান করুন।


এবং এখানে একটি পরীক্ষার জোতা:

$ touch {1..19}.jpg

$ ls
10.jpg  12.jpg  14.jpg  16.jpg  18.jpg  1.jpg  3.jpg  5.jpg  7.jpg  9.jpg
11.jpg  13.jpg  15.jpg  17.jpg  19.jpg  2.jpg  4.jpg  6.jpg  8.jpg

$ rename 's/\d+/sprintf("%05d", $&)/e' *.jpg

$ ls
00001.jpg  00005.jpg  00009.jpg  00013.jpg  00017.jpg
00002.jpg  00006.jpg  00010.jpg  00014.jpg  00018.jpg
00003.jpg  00007.jpg  00011.jpg  00015.jpg  00019.jpg
00004.jpg  00008.jpg  00012.jpg  00016.jpg

এবং উদাহরণ উপসর্গ (আমরা আলাদা কিছু করছি না):

$ touch track_{9..11}.mp3 && ls
track_10.mp3  track_11.mp3  track_9.mp3

$ rename 's/\d+/sprintf("%02d", $&)/e' *.mp3 && ls
track_09.mp3  track_10.mp3  track_11.mp3

আমি যদি পার্ল ব্যক্তি হত তবে এটিই সঠিক সমাধান হবে। সত্যিই ঝরঝরে।
এমজিপি

2
এটি কোনও পার্ল ব্যবহার করে না, কেবল সরবরাহ করা একটি সরঞ্জাম যা পার্লে ইতিমধ্যে লেখা রয়েছে।
রব

1
এই ক্ষেত্রে এটি না একটি একক পার্ল কমান্ড জড়িত তবে এতে ঠিক ভারী উত্তোলন না। sprintfপার্ল sprintfঅন্যান্য ভাষায় অনুরূপ আচরণ করে ।
অলি

21
for f in *.jpg ; do if [[ $f =~ [0-9]+\. ]] ; then  mv $f `printf "%.5d" "${f%.*}"`.jpg  ; fi ; done

সম্পাদন করা

ব্যাখ্যা:

  • if [[ $f =~ [0-9]+\. ]] নিশ্চিত করে যে কেবলমাত্র যাদের ফাইলের নাম্বার (ডট অনুসারে) রয়েছে তাদের নাম পরিবর্তন করা হচ্ছে।
  • printf "%.5d" NUMBER নেতৃস্থানীয় জিরো যোগ করুন
  • "${f%.*}" এক্সটেনশনটি (.jpg) কেটে দেয় এবং কেবল সংখ্যাটি দেয়
  • .jpgদ্বিতীয় ব্যাকটিক আবার ফাইল এক্সটেনশন যোগ করার পরে।

দ্রষ্টব্য যে এটি কেবল ফাইলের নামগুলিতে কাজ করবে যা সংখ্যা। বাম-প্যাডিং নেতৃস্থানীয় শূন্যগুলি নন-নাম্বারিত ফাইলগুলিতে আলাদা ফর্ম্যাট প্রয়োজন require

আপনি যদি পরীক্ষা করতে চান এই কমান্ডটি ব্যবহার করে দেখুন:

for f in *.jpg ; do if [[ $f =~ [0-9]+\. ]] ; then echo mv $f `printf "%.5d" "${f%.*}"`.jpg  ; fi ; done

সম্পাদনা 2

কমান্ডটি নিরাপদ করে নিশ্চিত করে যে কেবল ফাইলের নাম্বার নাম পরিবর্তন করা হচ্ছে। নোট করুন যে 00001.jpg এর মতো নামের পূর্বের যে কোনও ফাইল ওভাররাইট করা হবে।


এই একটি লাইনার স্ক্রিপ্ট উবুন্টু এবং অন্যান্য লিনাক্স ডিস্ট্রোজে 'আউট অফ বক্স' কাজ করে!
Per

6

পাইথন স্ক্রিপ্টের নীচে।

স্ক্রিপ্টটি সংখ্যার সংজ্ঞায়িত সংখ্যার উপরে নেতৃস্থানীয় শূন্যকে যুক্ত করে। নামটি যদি এর চেয়ে বড় হয় তবে ফাইল (নাম) অচ্ছুত।

একটি পুনঃনামকরণ ক্রিয়ায় বিভিন্ন এক্সটেনশনের সংমিশ্রণে কিছু সুবিধা যুক্ত হতে পারে। এক্সটেনশান (গুলি) যুক্ত করতে, কেবল তাদের টিপলে যুক্ত করুন, উদাহরণস্বরূপ extensions = (".jpg", ".jpeg", ".tiff")

খালি ফাইলে পাঠ্যটি অনুলিপি করুন, এটি সংরক্ষণ করুন, rename.pyফাইল ডিরেক্টরি ( sourcedir) এর সঠিক পাথ লিখুন , আপনি যে নতুন সংখ্যার ( number_ofdigits) নাম রাখতে চান এবং সেই সংখ্যার ফাইল এক্সটেনশন (গুলি) নাম পরিবর্তন করতে চান ( extensions)

কমান্ড দ্বারা এটি চালান:

python3 /path/to/script/rename.py

এই পান্ডুলিপি:

#!/usr/bin/python3

import shutil
import os

sourcedir = "/path/to/files"; number_ofdigits = 5; extensions = (".jpg", ".jpeg")

files = os.listdir(sourcedir)
for item in files:
    if item.endswith(extensions):
        name = item.split("."); zeros = number_ofdigits-len(name[0])
        newname = str(zeros*"0")+name[0]+"."+name[1]
        shutil.move(sourcedir+"/"+item, sourcedir+"/"+newname)

সম্পাদনা:

কিছুটা উন্নত সংস্করণের নীচে। এটি স্বয়ংক্রিয়ভাবে ডিরেক্টরিটির দীর্ঘতম নামটি নির্ধারণ করে এবং দীর্ঘতম দৈর্ঘ্য পর্যন্ত শীর্ষস্থানীয় শূন্যগুলি যুক্ত করে।

উদাহরণ:

1.jpg
12.jpg
123.jpg

হয়ে:

001.jpg
012.jpg
123.jpg

অঙ্কের সংখ্যা নির্ধারণ করার দরকার নেই।

#!/usr/bin/python3

import shutil
import os

sourcedir = "/path/to/files"; extensions = (".jpg", ".jpeg")
files = [(f, f[f.rfind("."):], f[:f.rfind(".")]) for f in os.listdir(sourcedir)if f.endswith(extensions)]
maxlen = len(max([f[2] for f in files], key = len))

for item in files:
    zeros = maxlen-len(item[2])
    shutil.move(sourcedir+"/"+item[0], sourcedir+"/"+str(zeros*"0")+item[0])

2

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

rename 's/\d+/sprintf("%05d",$&)/e' *.jpg

প্রথম যুক্তি হ'ল পার্ল এক্সপ্রেশন যা প্রতিটি ফাইলের নামের জন্য মূল্যায়ন করা হয়।


0

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


আপনার উত্তরটি কাজ করার সময়, দয়া করে নোট করুন যে এটি একটি shell-scriptingবিভাগ, যার অর্থ আমি একটি কমান্ডলাইন উত্তর খুঁজছি। এছাড়াও, আপনি প্রোগ্রাম সম্পর্কে আরও বিস্তারিত জানাতে পারেন? উদাহরণস্বরূপ, কোন প্যাটার্ন ফর্ম্যাটটি {num5}?
কাজ ওল্ফ

-4
for file in `(find * -maxdepth 1 -type f -name "*.jpg")`     
do    
  mv $file "000"$file    
done

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

আপডেট: ওয়েল আপনার আরও একটি সম্পূর্ণ উত্তর আছে।


2
এটি 1439.jpg এর নাম পরিবর্তন করেছে 0001439.jpg।
অবিনাশ রাজ

হ্যাঁ, আমি জানি, কেবল অতিরিক্ত শূন্য প্যাড করা যা এখনও বাছাইয়ের সাথে কাজ করা উচিত।
স্বর্ণেন্দু বিশ্বাস
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.