ফাইলের নামের মধ্যে একটি সংখ্যা বাড়িয়ে ফাইলের নাম পরিবর্তন করুন


14

আমার একটি ডিরেক্টরি রয়েছে যার মধ্যে নম্বরযুক্ত চিত্র ফাইল রয়েছে, এরকম কিছু:

01.png
02.png
03.png
03.svg
04.png
05.png
06.jpg
07.png
08.png
09.png
09.svg
10.png

কখনও কখনও (যেমন। একটি আলাদা বিন্যাসে একটি ফাইলের একাধিক সংস্করণ হতে পারে pngএবং svgএর সংস্করণ 03এবং 09উপরে ফাইল) কিন্তু সংখ্যার অন্যথায় পরপর হয়। সাধারণত প্রতিটি ডিরেক্টরিতে 40-80 টি ফাইল থাকে। এই চিত্রগুলি একটি পাণ্ডুলিপিতে প্রদর্শিত ক্রমের সাথে সংখ্যার সাথে মিল রয়েছে (একটি শব্দ নথি, তবে এটি গুরুত্বপূর্ণ নয়)। চিত্রগুলির ক্রম নির্ধারণের জন্য অন্য কোনও উপায় নেই।

আমি যদি পাণ্ডুলিপিতে একটি নতুন চিত্র যুক্ত করি তবে সঠিক সংখ্যায়ন সহ আমার এই ডিরেক্টরিতে চিত্রের একটি অনুলিপি রাখা দরকার। পাণ্ডুলিপির মধ্যে যদি নতুন চিত্রটি পঞ্চম হয় তবে এর জন্য জায়গা তৈরি করার জন্য আমার ডিরেক্টরিতে থাকা ফাইলগুলির নাম পরিবর্তন করতে হবে:

01.png
02.png
03.png
03.svg
04.png
06.png
07.jpg
08.png
09.png
10.png
10.svg
11.png

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

উত্তর:


11

আমি মনে করি এটি কাজ করা উচিত:

#!/bin/bash

NEWFILE=$1

for file in `ls|sort -g -r`
do
    filename=$(basename "$file")
    extension=${filename##*.}
    filename=${filename%.*}

    if [ $filename -ge $NEWFILE ]
    then
        mv "$file" "$(($filename + 1))".$extension
    fi
done

স্ক্রিপ্ট একটি প্যারামিটার নেয় - আপনার নতুন চিত্রের সংখ্যা।

পুনশ্চ. আপনার চিত্রগুলির চেয়ে অন্য ডিরেক্টরিতে স্ক্রিপ্ট রাখুন। ইমেজ ডিরেক্টরিতে আপনার বর্ণিতভাবে কেবলমাত্র চিত্রগুলি রাখা উচিত।


এটি আশাব্যঞ্জক বলে মনে হচ্ছে, আমি যখন আমার ল্যাপটপে ফিরে আসছি তখন কয়েক ঘন্টার মধ্যে এটি চেষ্টা করব।
রবার্টক

এটি কেবল তখনই কাজ করবে যদি আপনার ফাইলের নাম অ-
সংখ্যাযুক্ত

@ মেমস ওপি স্পষ্টভাবে জানিয়েছে যে ফাইলের নামগুলি একটি সংখ্যা দিয়ে শুরু হবে
xhienne

2

এটি zsh এ আরও সহজ হবে, যেখানে আপনি ব্যবহার করতে পারেন

break=$1   # the position at which you want to insert a file
setopt extended_glob
width=
for x in [0-9]*(nOn); do
  n=${x%%[^0-9]*}
  if ((n < break)); then break; fi
  ((++n))
  [[ -n $width ]] || width=${#n}
  mv $x ${(l:$width::0:)n}${x##${x%%[^0-9]*}}
done

ব্যাশে, এখানে এমন একটি স্ক্রিপ্ট রয়েছে যা ধরে নিয়েছে যে ফাইলগুলি একটি নির্দিষ্ট প্রস্থে প্যাড করা হয়েছে (অন্যথায়, স্ক্রিপ্টটি সঠিক ফাইলগুলির নাম পরিবর্তন করবে না) এবং প্যাডগুলি একটি নির্দিষ্ট প্রস্থে (যা নির্দিষ্ট করতে হবে) to

break=$1      # the position at which you want to insert a file
width=9999    # the number of digits to pad numbers to
files=([0-9]*)
for ((i=#((${#files}-1)); i>=0; --i)); do
  n=${x%%[^0-9]*}
  x=${files[$i]}
  if ((n < break)); then continue; fi
  n=$((n + 1 + width + 1)); n=${n#1}
  mv -- "${files[$i]}" "$n${x##${x%%[^0-9]*}}"
done

1

এই নিখুঁত বিষয়টি এই নিবন্ধে আচ্ছাদিত করা হয়েছে । মনে রাখবেন যে এসভিজি এবং পিএনজি ফর্ম্যাটগুলি সমর্থন করার জন্য আপনাকে একটি দ্বিতীয় এমভি পদক্ষেপ যুক্ত করে এটি পরিবর্তন করতে হবে।


আমি মনে করি না এটি হ'ল সমস্যা, এটি প্রতিবারের মতো সমস্ত চিত্রকে নতুন করে সাজিয়ে তুলছে। আমি কেবল একটি নির্দিষ্ট বিন্দু থেকে চিত্রগুলি পুনর্বিবেচনা করতে চাই।
রবার্টক

1

সহজ:

touch file`ls file* | wc -l`.ext

তুমি পাবে:

$ ls file*
file0.ext  file1.ext  file2.ext  file3.ext  file4.ext  file5.ext  file6.ext

আমি কীভাবে 1-9 এর জন্য অগ্রণী শূন্য যুক্ত করব? এছাড়াও মনে রাখতে হবে দুটি ফাইল 03.png এবং 03.svg থাকতে পারে।
রবার্টক

1

এই প্রশ্নে খুব বেশি আগ্রহী বলে মনে হয় না তবে, কেউ যদি এতে হোঁচট খায় তবে এখানে তিনটি বিষয় রয়েছে। একটি কীভাবে সিনেমিক মানদণ্ডের ভিত্তিতে নাম পরিবর্তন করতে ফাইলগুলি নির্বাচন করতে হয় (পরিসীমা বর্ণনামূলক নয় এবং ওয়াইল্ডকার্ড বা এমনকি নিয়মিত এক্সপ্রেশন দ্বারা নির্দিষ্ট করা যায় না - অটোমাটা তত্ত্ব বলে যে এটি এনএফএর চেয়ে জটিল)। দ্বিতীয়টি হল কোনও নামটির একটি অংশ পরিবর্তন করে কীভাবে পরিবর্তন করা যায়। তৃতীয়টি হল কীভাবে নামের সংঘর্ষ এড়ানো যায়। বাশ এবং অন্যান্য অনেক ভাষায় একটি স্ক্রিপ্ট এই নির্দিষ্ট রূপান্তরটি করতে পারে তবে আমাদের বেশিরভাগের পরিবর্তে প্রতিবার আমরা একটি গুচ্ছ ফাইলের নাম পরিবর্তন করতে চাইলে কোনও প্রোগ্রাম লিখতে হবে না। আমার (ফ্রি এবং ওপেন সোর্স) নতুন.পি দিয়ে আপনি যা চান তা করতে পারেন তবে নাম সংঘর্ষের সমস্যা এড়াতে দুটি অনুরোধ নেওয়া উচিত। প্রথমrene ?.*/#7-80 %?.* Bবিদ্যমান নামগুলি এড়াতে% এর একটি উপসর্গ যুক্ত করে, পরিসরে সমস্ত নাম বৃদ্ধি করে। তারপরে rene %* *যে ফাইল রয়েছে সেগুলি থেকে এই উপসর্গটি সরিয়ে দেয়। আমি এটি https://sourceforge.net/p/rene-file-renamer/discussion/example/thread/f0fe8aa63c/ এ বর্ণনা করি

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