ফাইল '1m 'বা' এমভি 'কীভাবে ফাইল01.txt, file02.txt… file85.txt এর মতো ফাইল রয়েছে?


23

ধরুন আমার কাছে এই নামে একগুচ্ছ ফাইল রয়েছে:

file01.txt file02.txt file03.txt ... file20.txt

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

আমি জানি 'ফাইল05.txt' থেকে 'file09.txt' থেকে 'আরএম' করতে চাইলে আমি করতে পারি:

rm file0[5-9].txt

তবে আমি কীভাবে ফাইল08.txt থেকে ফাইল 13.txt পর্যন্ত একটি পরিসীমা 'আরএম' করতে পারি? আমি এই কোড চেষ্টা করেছিলাম

rm file[08-13].txt

এবং এটি কাজ করে না। আমি এই আদেশটি চালাতে পারি:

rm file0[89].txt file1[0-3].txt

তবে আমি জানতে চাই যদি সম্ভব হয় তবে আমি 'আরএম'-এর আরও একটি পরিশোধিত যুক্তি দিয়ে এটি করতে পারি কিনা।


একটি প্রায় অভিন্ন প্রশ্নের উত্তর এখানে দেওয়া হয়েছিল: stackoverflow.com/questions/25049411/...
arielf

উত্তর:


38

আপনার এর ধনুর্বন্ধনী সম্প্রসারণ ব্যবহার করা প্রয়োজন bash:

rm file{08..13}.txt

এই ফাইল মুছে ফেলা হবে file08থেকে file13যদি থাকে ফাইল পাওয়া যাচ্ছে না, একটি ত্রুটি বার্তা প্রদর্শন করবে।

আপনার প্রয়োজন মেটাতে পরিসরটি সেট করুন।


গ্লোব্বিং অপারেটরের সমস্যা হ'ল []এটি এর ভিতরে থাকা প্রতিটি অক্ষর / অঙ্ককে একক টোকেন হিসাবে বিবেচনা করে এবং তাই কেবলমাত্র একক সংখ্যা ব্যবহার করে পরিসীমা ঘোষণাকে সমর্থন করে।

আপনি ব্যবহার পীড়াপীড়ি যদি [], তবে আপনি মিলটির এই বরং অরুপ প্যাটার্ন ব্যবহার করতে পারেন file08থেকে file13:

rm file0[8-9].txt file1[0-3].txt

5
বক্রবন্ধনী সম্প্রসারণ কমা দিয়ে দরকারী হয়, মত mv foo.{txt,md}বাcp foo.txt{,.bak}
কস

2

কিছু শেল যেমন উবুন্টুর ডিফল্ট /bin/sh(যা dash) বা mkshব্রেস সম্প্রসারণ নেই, বা ksh- ব্রেস সম্প্রসারণ প্যাডেড জিরো ব্যবহার করতে পারে না:

$ ksh -c 'echo {05..13}'
5 6 7 8 9 10 11 12 13

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

$ i=5; while [ "$i" -le 10 ]; do num=$(printf "%.2d" "$i" ); echo "file$num.txt";i=$(($i+1)); done
file05.txt
file06.txt
file07.txt
file08.txt
file09.txt
file10.txt

আর এই মোটামুটি পোর্টেবল হয় - সঙ্গে কাজ করে dash, ksh, mksh, এছাড়াও bash। এর ক্ষেত্রে kshএবং bashআমরা c-style for loop syntax (but not in case ofম্যাক্স orড্যাশও ব্যবহার করতে পারি):

$ ksh -c 'for((i=5;i<11;i++)); do num=$(printf "%.2d" "$i" ); echo "file$num.txt";done'             
file05.txt
file06.txt
file07.txt
file08.txt
file09.txt
file10.txt

নোট করুন যে bashক্ষেত্রে, printfপরিবর্তনশীল মুদ্রণ সমর্থন, এবং এইভাবে আমরা printf -v num "%.2d" "$i"কমান্ড প্রতিস্থাপন ব্যবহার না করে করতে পারেন ।

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