আমি কীভাবে ব্যাচ ফোল্ডারের নামগুলি এক তারিখের ফর্ম্যাট থেকে অন্য তারিখে রূপান্তর করতে পারি


10

আমার কাছে প্রচুর ফোল্ডার রয়েছে, এর মতো খেজুর হিসাবে নামকরণ হয়েছে:

10 Aug 2010  15 Sep 2010  20 Jun 2010  25 Jul 2010  6 Nov 2010
10 Sep 2010  16 Aug 2010  20 Mar 2010  26 Aug 2010  6 Oct 2010
11 Apr 2010  16 Jun 2010  21 Jun 2010  28 Aug 2010  7 Apr 2010
12 Aug 2010  16 Oct 2010  21 Mar 2010  28 Feb 2010  7 Aug 2010
13 May 2010  17 Apr 2010  22 Feb 2010  28 Jun 2010  7 Jun 2010
14 Aug 2010  17 Aug 2010  23 Jul 2010  28 Mar 2010  8 Apr 2010
14 Jun 2010  18 Aug 2010  24 Jul 2010  29 Mar 2010  8 Aug 2010
15 Aug 2010  19 Aug 2010  24 Nov 2010  30 Aug 2010  8 Jul 2010
15 Jul 2010  4 Apr 2010  25 Apr 2010  6 May 2010   8 Sep 2010

আমি তারিখের ফর্ম্যাটটি এতে পরিবর্তন করতে চাই:

2010-04-04  2010-05-03
2010-06-06  2010-07-02
2010-07-05  2010-09-01
2010-09-04  2010-09-05
2010-11-01

আমি কিভাবে ব্যাচ থেকে ফোল্ডার অনেক নাম পরিবর্তন করতে পারেন DD MMM YYYYকরতে YYYY-MM-DD?

উত্তর:


12

কিছুটা আমার নিজের আশ্চর্যরূপে, দেখে মনে হচ্ছে আমাদের পুরানো বন্ধুটি prename( renameকিছু সিস্টেমে ওরফে ) এটি করতে পারে - কিছুটা ঝাঁকুনির সাথে:

$ prename -vn -- '
  BEGIN{use Time::Piece};
  s/\d+ \w+ \d+/Time::Piece->strptime($&, "%d %b %Y")->strftime("%Y-%m-%d")/e
' *
10 Aug 2010 renamed as 2010-08-10
8 Sep 2010 renamed as 2010-09-08

বিকল্পভাবে, জিএনইউ ব্যবহার করে date

dirs=( ?\ ???\ ???? ??\ ???\ ???? ) # matches D MMM YYYY and DD MMM YYYY

for d in "${dirs[@]}"; do mv -v -- "$d" "$(date '+%Y-%m-%d' -d "$d")"; done

একটি echo(প্রামের -nপতাকার সমতুল্য ) দিয়ে পরীক্ষা করা:

$ for d in "${dirs[@]}"; do echo mv -v -- "$d" "$(date '+%Y-%m-%d' -d "$d")"; done
mv -v -- 8 Sep 2010 2010-09-08
mv -v -- 10 Aug 2010 2010-08-10

নোট করুন যে তারিখগুলি বিশ্লেষণ করা লোকাল নির্ভর হতে পারে।


9

GNU dateকমান্ড বিভিন্ন তারিখের ফর্ম্যাটগুলির মধ্যে রূপান্তর করতে খুব ভাল। উদাহরণ স্বরূপ:

$ date -d '17 Aug 2010' +%F
2010-08-17

এই বিষয়টি মনে রেখে, যদি আপনার টার্গেট ডিরেক্টরিতে কেবলমাত্র জিনিসগুলি আপনি নাম পরিবর্তন করতে চান এমন সাব-ডাইরেক্টরিগুলি হয় তবে আপনি কেবল তা করতে পারেন:

for d in *; do mv "$d" "$(date -d "$d" +%F)"; done

আপনি যদি কেবল ডিরেক্টরিগুলি নির্দিষ্ট করতে চান তবে ব্যবহার করুন:

for dir in */; do d=${dir%%/}; mv "$d" "$(date -d "$d" +%F)"; done

এবং কেবল সেই ডিরেক্টরিগুলির সাথে মেলে যাঁর নামটি একটি সংখ্যার সাথে শুরু হয়:

for dir in [0-9]*/; do d=${dir%%/}; mv "$d" "$(date -d "$d" +%F)"; done

6

এখানে একটি পাইথন স্ক্রিপ্ট যা datetimeমডিউলটি ব্যবহার করে পুনরায় নামকরণ করতে পারে :

#!/usr/bin/env python

from datetime import datetime
import os
import os.path
import sys


def main(target):
    dir_path = os.path.abspath(target)
    for i in os.listdir(target):
        old_name = os.path.join(dir_path, i)
        d = datetime.strptime(i, '%d %b %Y').strftime('%Y-%m-%d')
        new_name = os.path.join(dir_path, d)
        os.rename(old_name, new_name)

if __name__ == '__main__':
    main(sys.argv[1])

স্ক্রিপ্ট কল করুন rename.py। স্ক্রিপ্টটি ব্যবহার করতে, প্রথমে এটি চালনা করে চালানো chmod +x rename.pyএবং তারপরে চালানো দিয়ে প্যারেন্ট ডিরেক্টরিটি রয়েছে ./rename.py parent_dirযেখানে parent_dirআপনি যে ডিরেক্টরিতে পরিবর্তন করতে চান তার সমস্ত ডিরেক্টরি রয়েছে directory


4

এখানে একটি রুবি স্ক্রিপ্ট রয়েছে যা এটি একই কাজ করে। এটি সেই ডিরেক্টরিতে রাখুন যেখানে সেই সমস্ত ডিরেক্টরি থাকে।

#!/usr/bin/env ruby

require 'time'

Dir.glob('*').select do |f|
    if File.directory? f
        time = Time.parse(f.to_s)
        File.rename(f, time.strftime("%Y-%m-%d"))
    end
end

ডিরেক্টরিগুলি পুনরায় নামকরণ করতে chmod +x rename.rbএবং ব্যবহার করুন./rename.rb


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