ক্রমিক সংখ্যাতে ফোল্ডারে ফাইলের নামকরণ


230

আমি ডিরেক্টরিতে ফাইলগুলির নাম পরিবর্তন করে সিক্যুয়াল সংখ্যাতে চাই। ফাইলগুলি তৈরির তারিখের ভিত্তিতে।

উদাহরণস্বরূপ sadf.jpgকরার 0001.jpg, wrjr3.jpgকরতে 0002.jpgইত্যাদি, ফাইল মোট পরিমাণ (অতিরিক্ত শূণ্যসমূহ জন্য কোন প্রয়োজন প্রয়োজন না হলে) তার উপর নির্ভর করে নেতৃস্থানীয় শূন্যর সংখ্যা।


আমি stackoverflow.com/questions/880467/… এ দেখছি , কিন্তু আমি এটি আমার পক্ষে কাজ করতে পারি না।
Gnutt

1
লিনাক্স / ইউনিক্স কোনও তৈরির তারিখ সংরক্ষণ করে না।
পরবর্তী বিজ্ঞপ্তি না হওয়া পর্যন্ত বিরতি দেওয়া হয়েছে।

1
ls -1tr | পুনঃনামকরণ -v 's /.*/ আমাদের $ i; যদি (! $ i) {$ i = 1;} স্প্রিন্টফ ("% 04d.jpg", $ i ++) / ই'
ম্যাক্সপ

উত্তর:


313

একটি লুপ letএবং printfপ্যাডিং ব্যবহার করার চেষ্টা করুন :

a=1
for i in *.jpg; do
  new=$(printf "%04d.jpg" "$a") #04 pad to length of 4
  mv -i -- "$i" "$new"
  let a=a+1
done

-iপতাকা ব্যবহার করা বিদ্যমান ফাইলগুলি স্বয়ংক্রিয়ভাবে ওভাররাইটিং প্রতিরোধ করে।


4
আপনি printf -v new "%04d.jpg" ${a}ভেরিয়েবলের মধ্যে মান স্থাপন করতেও করতে পারেন। এবং ((a++))ভেরিয়েবল বৃদ্ধি করার জন্য কাজ করে। এছাড়াও, এটি তৈরির তারিখ ক্রমে এটি করে না বা প্যাডিং হ্রাস করবে না যা ওপি নির্দিষ্ট করে things তবে, এটি লক্ষ করা উচিত যে লিনাক্স / ইউনিক্স কোনও তৈরির তারিখ সংরক্ষণ করে না।
পরবর্তী বিজ্ঞপ্তি না হওয়া পর্যন্ত বিরতি দেওয়া হয়েছে।

3
আমার বাশ পরিবেশে কাজ করার জন্য এমভিটিকে মোড়কে ডাবল করা দরকার। এমভি "$ {আমি}" "$ {নতুন}"
গ্যারি থোমেন

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

2
mv -- "$i" "$new"ড্যাশগুলি দিয়ে শুরু হওয়া উত্স ফাইলের নামগুলি সঠিকভাবে পরিচালনা করতে ব্যবহার করা বাঞ্ছনীয় ; যেমনটি রয়েছে, mvপতাকা সংগ্রহ হিসাবে এই জাতীয় ফাইলগুলি পার্স করার চেষ্টা করবে।
চার্লস ডাফি 15

2
আমি এক নজরে প্রায় 800 টি ফাইল হারিয়েছি। আমি মনে করি -iউত্তরের অন্তর্ভুক্ত করা উচিত এবং সেই অনুসারে নোটটি আবার লিখতে হবে। এটা আরও নিরাপদ হবে। :(
KrIsHnA

269

এক লাইনে সৌন্দর্য:

ls -v | cat -n | while read n f; do mv -n "$f" "$n.ext"; done 

আপনি পরিবর্তন করতে পারেন .extসঙ্গে .png, .jpgইত্যাদি


4
কিংবদন্তি :), আমি উইন্ডোতে গিট শেল এ ব্যবহার করেছি, দুর্দান্ত কাজ করে! ^^।
মিঃ কে

4
দুর্দান্ত কাজ করে। এক লাইনে সৌন্দর্য। আমি যুক্ত করেছি ls -tr সর্বশেষ পরিবর্তিত সময় দ্বারা ফাইলগুলি পেতে।
রঞ্জিত সিজি

32
প্রিন্টফের মতো এটি যুক্ত করুন: ls | cat -n | while read n f; do mv "$f" `printf "%04d.extension" $n`; doneশূন্য প্যাডড সংখ্যার জন্য
শেইয়েরেন নিমিক

8
সতর্কতা: -nদুর্ঘটনাক্রমে ফাইলগুলি ওভাররাইটিং প্রতিরোধ করতে আপনি এমভি কমান্ডে যুক্ত করতে চাইতে পারেন । এই কঠিন উপায় আবিষ্কার!
ইয়ান ড্যানফোর্থ

4
এই উত্তর এবং অন্যদের উপর মন্তব্য থেকে কিছু দুর্দান্ত ধারণা একত্রিত করা: ls -1prt | grep -v "/$" | cat -n | while read n f; do mv -n "${f}" "$(printf "%04d" $n).${f#*.}"; done ফলাফল: (1) পরিবর্তনের ক্রম অনুসারে বাছাই করা, পরে সূচিগুলির সাথে ফাইলগুলি; (২) ডিরেক্টরিগুলি উপেক্ষা করে - এবং পুনরুক্তিযোগ্য নয়; (3) প্যাড সূচক; (4) মূল এক্সটেনশন বজায় রাখে।
হোর্হে

63

আমি সরলতার জন্য গৌতেহলের সমাধানটি পছন্দ করি তবে এটির একটি গুরুত্বপূর্ণ অপূর্ণতা রয়েছে। কয়েক হাজার ফাইলে চলার সময়, আপনি "যুক্তি তালিকা খুব দীর্ঘ" বার্তা পেতে পারেন (এ সম্পর্কে আরও ) এবং দ্বিতীয়ত, স্ক্রিপ্টটি সত্যিই ধীর হয়ে যেতে পারে। আমার ক্ষেত্রে এটি প্রায় 36.000 ফাইলগুলিতে চালানো, স্ক্রিপ্ট প্রায় সরানো হয়েছে। প্রতি সেকেন্ডে একটি আইটেম! কেন এমন হয় আমি সত্যই নিশ্চিত নই, তবে সহকর্মীদের কাছ থেকে আমি যে নিয়ম পেয়েছি তা হ'ল " findআপনার বন্ধু"

find -name '*.jpg' | # find jpegs
gawk 'BEGIN{ a=1 }{ printf "mv %s %04d.jpg\n", $0, a++ }' | # build mv command
bash # run that command

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


7
NRএকটি সংক্ষিপ্ত কমান্ডের জন্য আমি সারি নম্বর ব্যবহার করতে সংশোধন করেছি । gawk '{ printf "mv %s %04d.jpg\n", $0, NR }'
অপিওয়াত চানতাবুল

12
এখানে বিশাল নিরাপত্তা দুর্বলতা। আপনার নামের কোনও ফাইল আছে কিনা তা নিয়ে ভাবুন $(rm -rf /).jpg
চার্লস ডাফি

চার্লস যে আউট নির্দেশ করার জন্য ধন্যবাদ। আপনি একটি নিরাপদ সমাধান পরামর্শ দিতে পারেন?
beibei2

2
ফাইলনামের ফাঁকে ফাঁকে ফাঁকে ফাঁকে ফাঁকে ফাঁকে ফেলা যায়। উত্স ফাইল নামটির চারপাশে উদ্ধৃতিগুলি ব্যবহার করুন। printf "এমভি \"% s s "% 04d.jpg \ n", $ 0, a ++
বাসকিন

1
forলুপ ফাইল প্রতি 1 সেকেন্ড নিচ্ছে না, কঠোরভাবে বলতে। ফাইল সিস্টেম থেকে ৩,000,০০০ ফাইলের নাম আনতে দীর্ঘ সময় নিচ্ছে, তারপরে যুক্তিযুক্তভাবে দ্রুত লুপ করুন। আপনি যে সুনির্দিষ্ট আদেশগুলি চালাচ্ছেন তা নির্বিশেষে অনেকগুলি ফাইল সিস্টেমে বড় ডিরেক্টরিতে সমস্যা থাকে; তবে সাধারণত findশেল ওয়াইল্ডকার্ডের চেয়ে দ্রুত হতে চলেছে কারণ এটি মিলে যাওয়া ফাইলগুলির তালিকাটি সংগ্রহ এবং বাছাই করতে হবে।
ট্রিপলি

30

"পুনরায় নামকরণ" কমান্ড সহ

rename -N 0001 -X 's/.*/$N/' *.jpg

অথবা

rename -N 0001 's/.*/$N.jpg/' *.jpg

32
আমার rename(লিনাক্স মিন্ট 13) এর কোনও -Nবিকল্প নেই।
লুক এইচ

আমি কেবল
পুনর্নবীকরণ

8
আমি কোথায় এন-বিকল্পের সাথে একটি নাম পরিবর্তন করে কমান্ড পেয়েছি তা জানতে আগ্রহী। আমার উবুন্টু 14.04 এর এটি নেই।
স্টিফান হেনিংসেন

1
আমি renameআদেশটি ভালবাসি , তবে আমি কখনই জানতাম না -N! ধন্যবাদ!
ড্যান লেকোক্ক

1
আছে অন্তত তিনটি ভিন্ন নামে পরিচিত সরঞ্জামrename । @ বোস্ট্রোট পোস্ট করা লিঙ্কটি অন্য একটি নাম পরিবর্তনের সরঞ্জাম এবং দেখে মনে হয় @ রোমানআরননেস্টারভ সেইটিকে ব্যবহার করেছেন। Ped renameপেডার স্ট্রে এবং ল্যারি ওয়াল দ্বারা ব্যবহারকারীরা ( perl-renameআর্চ লিনাক্সের প্যাকেজ renameএবং ডেবিয়ান / উবুন্টুতে প্যাকেজ ): আপনি $Nনিজের সংজ্ঞা দিতে পারেন :perl-rename '$N=sprintf("%04d",++$N); s/.*/$N.jpg/' *.jpg
সোসোই

30

ওএসএক্সে পেরোর দ্রবণটি ব্যবহার করতে কিছু সংশোধন প্রয়োজন। আমি ব্যবহার করতাম:

find . -name '*.jpg' \
| awk 'BEGIN{ a=0 }{ printf "mv \"%s\" %04d.jpg\n", $0, a++ }' \
| bash

দ্রষ্টব্য: ব্যাকস্ল্যাশগুলি লাইনের ধারাবাহিকতার জন্য রয়েছে

জুলাই 20, 2015 সম্পাদনা করুন: স্পেস সহ ফাইলের নামগুলি সমর্থন করার জন্য কমান্ডের \"%s\"যুক্তিটি উদ্ধৃত করতে @ ক্লাস্টোফারের প্রতিক্রিয়া অন্তর্ভুক্ত করা হয়েছে mv


3
পেরোর সমাধানের মতো এখানেও নিরাপত্তা দুর্বলতা রয়েছে। আপনার নামের কোনও ফাইল আছে কিনা তা নিয়ে ভাবুন $(rm -rf /).jpg
চার্লস ডাফি

ধন্যবাদ, এটি কাজ করে। তবে আপনার প্রথম যুক্তিটি উদ্ধৃত করা উচিত mv। আপনার যদি নামের একটি ফাইল থাকে তবে some thing.jpgআপনার স্ক্রিপ্ট ব্যর্থ হয়। এটি আমি ব্যবহার করেছি:find . -name '*.jpg' | awk 'BEGIN{ a=0 }{ printf "mv \"%s"\ wallpaper-%04d.jpg\n", $0, a++ }' | bash
ক্লাস্টোফার

আমি সম্ভবত -maxdepth 1বর্তমান ডিরেক্টরিতে কেবল jpgs এ কাজ করতে ব্যবহার করব , কারণ দুঃখিত হওয়ার চেয়ে নিরাপদ থাকা ভাল।
পিটার পেরে

আপনি যদি পাইপ চরিত্রটিকে আগের লাইনের শেষ দিকে নিয়ে যান তবে আপনার কোনও ব্যাকস্ল্যাশ দরকার নেই।
ট্রিপলি

আপনি ls -1 *.jpgপরিবর্তে ব্যবহার করতে পারেন , অন্যথায় এটি বাছাই করা হবে না। বা |sort|
জোর পূর্ববর্তী

28

একটি খুব সাধারণ বাশ ওয়ান লাইনার যা মূল এক্সটেনশানগুলি রাখে, শীর্ষস্থানীয় জিরো যুক্ত করে এবং ওএসএক্সেও কাজ করে:

num=0; for i in *; do mv "$i" "$(printf '%04d' $num).${i#*.}"; ((num++)); done

সরল সংস্করণ http://ubuntuforums.org/showthread.php?t=1355021


ঠিক আমি খুঁজছেন ছিল কি. আমি পছন্দ করি আপনি সূচনা সূচি সেট করতে পারেন।
জ্যাক ভায়াল

2
দয়া করে এই নোট মূল রাখা হবে না অর্ডার ফাইল।
রায় শিলক্রট

@ রয়শিলক্রোট » মূল অর্ডারটি রাখবে না by এর অর্থ কী ? ব্যাশ এবং অন্যান্য পক্সিক শেলগুলির গ্লোবগুলি সিস্টেমের লোকাল অনুসারে বাছাই করা ক্রমে প্রসারিত হয়। অবশ্যই, এটি এর 9.extআগে বাছাই করে না 11.extতবে অন্যান্য সরঞ্জামগুলি (যেমন ls) এটিও করবে না।
সোকোই

11

সমস্ত পরিস্থিতিতে কাজ করতে, নামের জায়গাগুলি থাকা ফাইলগুলির জন্য একটি put "রাখুন

find . -name '*.jpg' | gawk 'BEGIN{ a=1 }{ printf "mv \"%s\" %04d.jpg\n", $0, a++ }' | bash

3
আসলে সমস্ত পরিস্থিতিতে আবরণ করে না। আক্ষরিক উক্তি সম্বলিত একটি ফাইলের নাম তুচ্ছভাবে পালাতে পারে - এবং যেহেতু আপনি একক উদ্ধৃতির চেয়ে ডাবল উদ্ধৃতি ব্যবহার করছেন তাই এর মতো বিস্তৃতি $(rm -rf /)এখনও সম্মানিত।
চার্লস ডাফি 15

11

যদি আপনার renameসমর্থন না করে তবে -Nআপনি এরকম কিছু করতে পারেন:

ls -1 -c | xargs rename -n 's/.*/our $i; sprintf("%04d.jpg", $i++)/e'

সম্পাদনা প্রদত্ত নম্বর দিয়ে শুরু করতে, আপনি নীচের (কিছুটা কুরুচিপূর্ণ) কোডটি ব্যবহার করতে পারেন, কেবল নিজের পছন্দ অনুসারে 123 প্রতিস্থাপন করুন:

ls -1 -c | xargs rename -n 's/.*/our $i; if(!$i) { $i=123; } sprintf("%04d.jpg", $i++)/e'

এটি তৈরির সময় অনুসারে ফাইলগুলি তালিকাভুক্ত করে (সর্বপ্রথম নতুন, যোগ করুন) -r বিপরীতে সাজানোর জন্য এলএসে ), তারপরে পুনরায় নামকরণের জন্য এই ফাইলগুলির তালিকা প্রেরণ করে। পুনঃনামকরণটি ফরমেট এবং ইনক্রিমেন্ট কাউন্টারে পারিগ কোড ব্যবহার করে code

তবে, আপনি যদি এক্সপি তথ্য দিয়ে জেপিইজি চিত্রগুলি নিয়ে কাজ করে থাকেন তবে আমি প্রস্তাব দেব exiftool

এটি " পুনর্নামকরণের উদাহরণগুলি" এর অধীনে এক্সিফটল ডকুমেন্টেশন থেকে এসেছে

   exiftool '-FileName<CreateDate' -d %Y%m%d_%H%M%S%%-c.%%e dir

   Rename all images in "dir" according to the "CreateDate" date and time, adding a copy number with leading '-' if the file already exists ("%-c"), and
   preserving the original file extension (%e).  Note the extra '%' necessary to escape the filename codes (%c and %e) in the date format string.

আমি কীভাবে একটি নির্দিষ্ট নম্বর ব্যবহার করে শুরু করতে পারি rename?
জানুয়ারী

6

ওএসএক্স-এ , হোমব্রিউ থেকে নতুন নাম স্ক্রিপ্টটি ইনস্টল করুন:

brew install rename

তাহলে আপনি এটি সহজেই হাস্যকরভাবে সহজেই করতে পারেন:

rename -e 's/.*/$N.jpg/' *.jpg

অথবা একটি দুর্দান্ত উপসর্গ যোগ করতে:

rename -e 's/.*/photo-$N.jpg/' *.jpg

3
এটি একটি দুর্দান্ত স্ক্রিপ্ট এবং এটি কেবল পার্লের উপর নির্ভর করে। ব্রিউ কেবল ম্যাক্সে কাজ করে তবে আপনি এটি গিথুব ( github.com/ap/rename ) থেকে ধরে এটি লিনাক্স বা উইন্ডোজে ব্যবহার করতে পারেন।
টিম ড্যানার

3
এটি আমার পক্ষে কাজ করে না আমি পেয়েছিGlobal symbol "$N" requires explicit package name (did you forget to declare "my $N"?) at (user-supplied code).
অ্যান্থনি চুং

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

2

কমান্ড অনুসরণ করে সমস্ত ফাইলের নাম পরিবর্তন এবং ছোট হাতের এক্সটেনশান:

rename --counter-format 000001 --lower-case --keep-extension --expr='$_ = "$N" if @EXT' *

1

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

সংখ্যাপাত করা

@ গ্নুট আপনি যে আচরণটি চান তা নিম্নলিখিত টাইপ করে অর্জন করা যেতে পারে:

./numerate.sh -d <path to directory> -o modtime -L 4 -b <startnumber> -r

অপশন থাকলে -r বাদ দিলে পুনরায় নামকরণটি কেবল সিমুলেটেড হবে (পরীক্ষার জন্য সহায়ক হওয়া উচিত)।

দশন এল লক্ষ্য সংখ্যার দৈর্ঘ্য বর্ণনা করে (যা নেতৃস্থানীয় জিরো দিয়ে পূর্ণ হবে) বিকল্পগুলির সাথে একটি উপসর্গ / প্রত্যয় যুক্ত করাও সম্ভব -p <prefix> -s <suffix>

যদি কেউ চান যে ফাইলগুলি সংখ্যাযুক্ত হওয়ার পূর্বে সংখ্যাগুলি অনুসারে বাছাই করা যায়, কেবল -o modtimeবিকল্পটি সরিয়ে দিন remove



1

আসুন ধরে নেওয়া যাক আমাদের এই ফাইলগুলি একটি ডিরেক্টরিতে রয়েছে, ক্রমের তালিকায় তালিকাভুক্ত করা হয়েছে, প্রথমটি সবচেয়ে প্রাচীন:

a.jpg
b.JPG
c.jpeg
d.tar.gz
e

তারপরে ls -1crউপরের তালিকাটির ঠিক আউটপুট দেয়। তারপরে আপনি এটি ব্যবহার করতে পারেন rename:

ls -1cr | xargs rename -n 's/^[^\.]*(\..*)?$/our $i; sprintf("%03d$1", $i++)/e'

যা ফলাফল

rename(a.jpg, 000.jpg)
rename(b.JPG, 001.JPG)
rename(c.jpeg, 002.jpeg)
rename(d.tar.gz, 003.tar.gz)
Use of uninitialized value $1 in concatenation (.) or string at (eval 4) line 1.
rename(e, 004)

সতর্কতা "অস্বীকৃত মান ব্যবহার […]" কোনও এক্সটেনশন ছাড়াই ফাইলগুলির জন্য প্রদর্শিত হয়; আপনি এটি উপেক্ষা করতে পারেন।

পুনরায় নামকরণ করতে প্রয়োগ করতে কমান্ড -nথেকে সরান rename

এই উত্তরটি এপ্রিল 2014 এর লুকের উত্তর দ্বারা অনুপ্রাণিত হয়েছে । এটি ফাইলের মোট পরিমাণের উপর নির্ভর করে নেতৃস্থানীয় শূন্যগুলির সংখ্যা নির্ধারণ করার জন্য জ্নুটকে প্রয়োজনীয়তা উপেক্ষা করে।


এটি আমার জন্য এখানে সবচেয়ে কার্যকর উত্তর ছিল, বেশিরভাগ কারণেই আমি অপশনটি চালানোর আগে শুকনো-চালনা করতে চেয়েছিলাম এবং এটিও কারণ যে আমি ls -1tUতৈরির সময়টিতে পরিবর্তন করে ক্রমটি টিউন করতে পারি । এটিও renameইনস্টল করা দরকার , যা আমার ছিল না।
আন্তনিহ

1

আবার পেরোর সলিউশনটি সামান্য সংশোধন করে ব্যবহার করা হচ্ছে, কারণ find হবে ক্রম আইটেমের ডিরেক্টরি ট্রিটিতে ডিরেক্টরি প্রবেশ করতে হবে ডিরেক্টরি ডিরেক্টরিতে। এটি (বেশিরভাগ ক্ষেত্রে) একই মেশিনে রান থেকে চালানো থেকে সামঞ্জস্য থাকবে এবং কোনও মুছে ফেলা না থাকলে মূলত "ফাইল / ডিরেক্টরি তৈরির আদেশ" হবে।

তবে, কিছু ক্ষেত্রে আপনাকে কিছু যৌক্তিক আদেশ পেতে হবে, নাম হিসাবে বলুন, যা এই উদাহরণে ব্যবহৃত হয়।

find -name '*.jpg' | sort -n | # find jpegs
gawk 'BEGIN{ a=1 }{ printf "mv %s %04d.jpg\n", $0, a++ }' | # build mv command
bash # run that command 

3
এটি ব্যবহার করবেন না। এইভাবে ব্যাশে পুনঃনির্দেশ করা একটি বিশাল সুরক্ষা ঝুঁকি। যদি ফাইলের একটির নামটি ফর্মের হয় blahblah; rm -r * blahblah.jpg?
xhienne

1

সময় অনুসারে বাছাই করা, জেপিজি সীমাবদ্ধ, শীর্ষস্থানীয় শূন্য এবং একটি বেসনাম (যদি আপনি সম্ভবত এটি চান তবে):

ls -t *.jpg | cat -n |                                           \
while read n f; do mv "$f" "$(printf thumb_%04d.jpg $n)"; done

(সমস্ত এক লাইনে, ছাড়া \)


জিনিসগুলির দুর্দান্ত পরিকল্পনায়, এই পৃষ্ঠায় অনেকগুলি উত্তর ভয়ঙ্কর, তাই সম্ভবত এটি বিশেষ করে ডাউনওয়েটের যোগ্য নয়। যদিও আমি lsকোনও স্ক্রিপ্টে ব্যবহার করে এমন কোনও বিষয়কে উস্কে দিতে দ্বিধা বোধ করি ।
ট্রিপল

আমি এই উত্তরটিকে নেতিবাচক দিক থেকে সংরক্ষণ করেছি যেমন সম্ভবত ভঙ্গুর, এটি আমার নির্দিষ্ট ব্যবহারের ক্ষেত্রে কাজ করেছিল।
ভিল

1
ls -1tr | rename -vn 's/.*/our $i;if(!$i){$i=1;} sprintf("%04d.jpg", $i++)/e'

পুনঃনামকরণ -vn - অফ পরীক্ষা মোডের জন্য এন সরান

{$ i = 1;} - নিয়ন্ত্রণ শুরুর নম্বর

"% 04d.jpg" - নিয়ন্ত্রণ গণনা 04 এবং সেট আউটপুট এক্সটেনশন .jpg


কেবলমাত্র নেটিভ নামটি ব্যবহার করে এই উত্তরটিকে সমর্থন করা। আমার ব্যবহারের ক্ষেত্রে ফাইলটি প্রথম দুটি অঙ্কের সাথে 01 থেকে শুরু হওয়া সংখ্যাগুলি প্রতিস্থাপন করা হবে:rename -v -n 's/../our $i;if(!$i){$i=1;} sprintf("%02d", $i++)/e' *
মধ্যবর্তী

1

আমার কাছে এই উত্তরগুলির সংমিশ্রণটি পুরোপুরি কার্যকর হয়েছিল:

ls -v | gawk 'BEGIN{ a=1 }{ printf "mv %s %04d.jpg\n", $0, a++ }' | bash
  • ls -v 1 10 9 টি সঠিকভাবে অর্ডার করতে সহায়তা করে: 1 9 10 অর্ডার, jpg JPG jpeg এর সাথে ফাইলের নাম বর্ধনের সমস্যাগুলি এড়ানো
  • gawk 'BEGIN{ a=1 }{ printf "mv %s %04d.jpg\n", $0, a++ }'4 টি অক্ষর এবং নেতৃস্থানীয় শূন্য সহ রেন্টার। এমভি এড়িয়ে আমি ঘটনাক্রমে দুর্ঘটনাক্রমে একই সংখ্যাটি পেয়ে ইতিমধ্যে যা কিছু আছে সেগুলি মুছে ফেলার চেষ্টা করি না।
  • bash , executes

@ জিহেন কী বলেছে সে সম্পর্কে সচেতন থাকুন, অজানা বিষয়বস্তুকে বাশ দেওয়া পাইপ দেওয়া একটি সুরক্ষা ঝুঁকি। তবে আমি আমার স্ক্যান করা ফটো ব্যবহার করায় এটি আমার পক্ষে হয়নি।


0

আপনি ls ব্যবহার করতে পারেন

ls *.JPG| awk 'BEGIN{ a=0 }{ printf "mv %s gopro_%04d.jpg\n", $0, a++ }' | bash

5
দেখুন mywiki.wooledge.org/ParsingLs অন্যান্য, একভাবে ভাঙ্গা সমাধান নিরাপত্তা দুর্বলতা বর্ণনা, এবং এছাড়াও।
চার্লস ডাফি

1
এটি ব্যবহার করবেন না। এইভাবে ব্যাশে পুনঃনির্দেশ করা একটি বিশাল সুরক্ষা ঝুঁকি। যদি ফাইলের একটির নামটি ফর্মের হয় blahblah; rm -r * blahblah.JPG?
xhienne

0

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

এই স্ক্রিপ্টটি প্রথমে বিদ্যমান সংখ্যাযুক্ত ফাইলগুলির নাম পরিবর্তন করে:

#!/usr/bin/perl

use strict;
use warnings;

use File::Temp qw/tempfile/;

my $dir = $ARGV[0]
    or die "Please specify directory as first argument";

opendir(my $dh, $dir) or die "can't opendir $dir: $!";

# First rename any files that are already numeric
while (my @files = grep { /^[0-9]+(\..*)?$/ } readdir($dh))
{
    for my $old (@files) {
        my $ext = $old =~ /(\.[^.]+)$/ ? $1 : '';
        my ($fh, $new) = tempfile(DIR => $dir, SUFFIX => $ext);
        close $fh;
        rename "$dir/$old", $new;
    }
}

rewinddir $dh;
my $i;
while (my $file = readdir($dh))
{
    next if $file =~ /\A\.\.?\z/;
    my $ext = $file =~ /(\.[^.]+)$/ ? $1 : '';
    rename "$dir/$file", sprintf("%s/%04d%s", $dir, ++$i, $ext); 
}

0

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

মোবাইল ফোনের ছবি এবং মুভিগুলির জন্য আমার সাধারণত বছর থেকে কেবল একটি ফোল্ডার থাকে। এই আদেশটি প্রয়োগ করে, আমার ছবি এবং চলচ্চিত্রগুলি টিভি বা সংরক্ষণাগারটিতে সঠিক ক্রমে স্লাইডশোয়ের জন্য প্রস্তুত।

সচেতন হন যে আপনার যদি ফাইলের নাম সংঘর্ষ হয় তবে আপনি ফাইল হারাচ্ছেন। সুতরাং প্রথমে বিজোড় মতনটির নতুন নামকরণ করুন temp001.jpgএবং তারপরে আপনার চূড়ান্ত ফাইলের নামটি কার্যকর করুন।

DIGITS=$(ls | wc -l | xargs | wc -c | xargs); ls -tcr | cat -n | while read n f; do mv "$f" "$(printf "%0${DIGITS}d" $n).${f##*.}"; done

1
lsএকবারে চালানো নয়, দু'বার দেখে মনে হচ্ছে এটি এড়ানো ভাল ছিল তবে আমি এটি কোনও গভীরতার সাথে অধ্যয়ন করি নি।
ট্রিপলি

১. আমি যদি ইচ্ছাকৃতভাবে কোনও অনলাইনার প্রস্তাব করি তবে আপনি কেন পরে এটি পরিবর্তন করবেন? আমার মতো অনেক ব্যবহারকারী কোনও কাজ শেষ করতে অনলাইনারকে কপি-পেস্ট করতে পছন্দ করেন। অন্যরা লাইন ধরে লাইন অনুলিপি করতে পছন্দ করে, এই থ্রেডে আরও একটি উত্তর রয়েছে other ২. মূল প্রশ্নটি ছিল "ফাইলগুলির মোট পরিমাণের উপর নির্ভর করে শীর্ষস্থানীয় শূন্যের সংখ্যা" এবং এটি প্রথমটি সম্পন্ন করে ls, সুতরাং কেন তাদের দুটি প্রয়োজন তা নিশ্চিত করে। ৩. এই জাতীয় কমান্ডগুলি এক-শট এবং স্ক্রিপ্টগুলিতে অন্তর্ভুক্ত নয়, তাই লোকেরা ওয়ান-লাইনার পছন্দ করার কারণ রয়েছে
ফ্ল্যাভিও আইলো

1
দুঃখিত, আপনি বুঝতে পারেন যে এটি গুরুত্বপূর্ণ ছিল। আমার জন্য, কোডটি ব্যাপকভাবে পড়তে সক্ষম হওয়ায় এটিকে একক লাইন হিসাবে অনুলিপি / আটকানোর ক্ষমতা হ্রাস করে। আমি এমন পরিবেশ খুঁজে পাই নি যেখানে বাশের এমন পেস্ট নিয়ে সমস্যা হবে যা একাধিক লাইন ছড়িয়ে দেয় তবে আমি কিছু উপেক্ষা করছি।
ট্রিপলি

0

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

এখানে আমি সমস্ত jpg ফাইলের জন্য '_' দিয়ে একটি ফাইলের নামে 'স্পেস' প্রতিস্থাপন করেছি
#! / বিন / ব্যাশ
নাম 'y / / _ /' * jpg # স্থান ফাঁকা _
যাক এক্স = 0;
আমি ইন * .jpg জন্য; করুন
    এক্স = (x + 1) দিন
    mv $ i $ x.jpg
সম্পন্ন

লিনাক্স (উবুন্টু) এ পুনরায় নাম ইনস্টল করুন, "
সুদো অ্যাপল

0

আপনার নাম পরিবর্তনের জন্য একাধিক ফাইল নির্বাচন করার পরে আজকাল একটি বিকল্প রয়েছে (আমি থুনার ফাইল ম্যানেজারে দেখেছি)।

  1. একাধিক ফাইল নির্বাচন করুন
  2. বিকল্প পরীক্ষা করুন
  3. নতুন নাম নির্বাচন করুন

একটি প্রম্পট আসে সেই নির্দিষ্ট দিরের সমস্ত ফাইলের সাথে বিভাগ বিভাগটি পরীক্ষা করে দেখুন


-1

এই স্ক্রিপ্টটি ম্যাক ওএস ব্যাশে ফাইল তৈরির তারিখ অনুসারে বাছাই করবে। আমি ভিডিওর পুনঃনামকরণ করতে এটি ব্যবহার করি। শুধু এক্সটেনশান এবং নামের প্রথম অংশ পরিবর্তন করুন।

ls -trU *.mp4| awk 'BEGIN{ a=0 }{ printf "mv %s lecture_%03d.mp4\n", $0, a++ }' | bash

1
এটি ব্যবহার করবেন না। এইভাবে ব্যাশে পুনঃনির্দেশ করা একটি বিশাল সুরক্ষা ঝুঁকি। যদি ফাইলের একটির নামটি ফর্মের হয় blahblah; rm -r * blahblah.mp4?
xhienne

-1

"পুনর্নবীকরণ" কমান্ড সহ এখানে আরও একটি সমাধান:

find -name 'access.log.*.gz' | sort -Vr | rename 's/(\d+)/$1+1/ge'

শীর্ষস্থানীয় শূন্যগুলি পুনরুদ্ধার করতে:rename 's/(\d+)/sprintf("%04d",$1)+1/ge'
ক্যামিল গৌডেসুন

এই ফোল্ডারের জন্য নামগুলির মতো ফাইলগুলির জন্য প্রত্যাশার মতো কাজ করে না: DSC_3451.JPG, DSC_3452.JPG ইত্যাদি সন্ধান করুন -র নাম '* .জেপিজি' | সাজানো -ভিআর | 's / (\ d +) / $ 1 + 1 / ge' এর নতুন নাম পরিবর্তন করুন কোনও কিছুই পরিবর্তন করে না
Tiberiu C.

-2

পেরোর উত্তর আমাকে এখানে পেয়েছে :)

চিত্র দর্শকদের সময় অনুসারে চিত্র প্রদর্শন না করায় আমি সময়ের সাথে তুলনামূলকভাবে ফাইলগুলির নাম পরিবর্তন করতে চেয়েছিলাম।

ls -tr *.jpg | # list jpegs relative to time
gawk 'BEGIN{ a=1 }{ printf "mv %s %04d.jpg\n", $0, a++ }' | # build mv command
bash # run that command

2
এটি ব্যবহার করবেন না। এইভাবে ব্যাশে পুনঃনির্দেশ করা একটি বিশাল সুরক্ষা ঝুঁকি। যদি ফাইলের একটির নামটি ফর্মের হয় blahblah; rm -r * blahblah.jpg? মাত্র একটি চরম উদাহরণ।
xhienne


-3

000০০০ নাম্বার দেওয়ার জন্য, এক ফোল্ডারে থাকা ফাইলগুলি আপনি ACDsee প্রোগ্রামের 'পুনর্নবীকরণ' বিকল্পটি ব্যবহার করতে পারেন।

একটি উপসর্গ সংজ্ঞায়নের জন্য এই বিন্যাসটি ব্যবহার করুন: ####"*"

তারপরে শুরু নম্বরটি সেট করুন এবং পুনরায় নাম টিপুন এবং প্রোগ্রামটি অনুক্রমিক সংখ্যা সহ সমস্ত 6000 ফাইলের নাম পরিবর্তন করবে।


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