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


16

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

file1.txt
file2.txt
...
file30.txt
...

এখন, আমি ফাইলের একটি নির্দিষ্ট পরিসরে একটি কমান্ড চালাতে চাই, আসুন 18 থেকে 31 বলতে পারি say

এখন পর্যন্ত আমি নিম্নলিখিত উপায়গুলি ব্যবহার করেছি,

তিনটি যুক্তি

command file1[8-9].txt file2[0-9].txt file3[0-1].txt

এখন ধরুন আমি অন্য প্রতিটি নম্বর চাই,

লুপ

for i in `jot - 18 31 2`; do echo file${i}.txt; done | xargs command

এটি দেখে মনে হচ্ছে এটি আরও নির্ভরযোগ্য লুপ (স্পেস ওয়ার্কস)

for i in `jot - 18 31 2`; do echo "\"file${i}.txt\" "; done | xargs command

তবে মনে হচ্ছে এটি করার সহজ উপায় থাকা উচিত। আমি অনুমান করছি সবচেয়ে ভাল সমাধান হ'ল বাশ ফাংশন তৈরি করা যা ফাইলগুলির সেট কমান্ড লাইনে ফিরিয়ে দেবে। তাহলে আমি এমন কিছু করতে পারলাম,

command `filerange file 18 31`

দক্ষতার সাথে এটি করার জন্য আরও ভাল উপায় বা পরামর্শ আছে কি?

ওয়েবে বা অন্য কোথাও এই একই প্রশ্নের উত্তরটি আমি মিস করলে আমি আগেই ক্ষমা চাই superuser


আমি forলুপ ব্যবহার করে এমন একটি সমাধান অন্তর্ভুক্ত করতে আমার প্রশ্ন আপডেট করেছি যা এক্সার্গস ব্যবহার করে ফাইলের নামগুলিতে ফাঁকা রাখার অনুমতি দেয়। আপনার কাছে ব্যাশ 4 না থাকলে এটি কাজ করছে বলে মনে হয় 4 আপনার যদি ব্যাশ 4 থাকে তবে অবশ্যই ব্রেস প্রসারিত ব্যবহার করুন! নির্বাচিত উত্তর দেখুন। স্নো চিতাবাঘের বাশ আপগ্রেড করতে লজ্জাজনক প্লাগ
মিল্কিপস্টম্যান

উত্তর:


25

এটা চেষ্টা কর:

for file in file{18..31}.txt

এটি "সিকোয়েন্স এক্সপ্রেশন" হিসাবে পরিচিত এবং এটি বাশের ব্রেস সম্প্রসারণ বৈশিষ্ট্যের অংশ। এটি বাশ 3 এবং 4 এ কাজ করে।

বর্ধিত বৈশিষ্ট্যটি বাশ ৪-তে নতুন You

বাশ 4 এ, আপনি এটি করতে পারেন:

$ for i in {1..6..2}; do echo $i; done
1
3
5

তবে বাশ 3-তে, একই ফলাফল পেতে আপনাকে এটি করতে হবে:

$ for ((i=1; i<=6; i+=2)); do echo $i; done

একই ফর্ম এক এক দ্বারা বৃদ্ধি:

$ for ((i=1; i<=6; i++)); do echo $i; done

সংখ্যার যে কোনওটি ভেরিয়েবল বা এক্সপ্রেশন হতে পারে। যাইহোক, একটি ক্রম প্রকাশে সংখ্যাগুলি ধ্রুব হতে হবে

আপনার ফাইলে সেই ফর্মটি ব্যবহার করে এখানে একটি উদাহরণ দেওয়া হল:

for ((i=18; i<=31; i++))
do
    echo "file${i}.txt"
done

বাশ 4-এ সিকোয়েন্স এক্সপ্রেশনগুলির আরেকটি নতুন বৈশিষ্ট্য হল শীর্ষস্থানীয় শূন্যগুলি অন্তর্ভুক্ত করার ক্ষমতা। আপনি যদি সঠিকভাবে বাছাই করা যায় এমন নম্বরযুক্ত ফাইলগুলি তৈরি করতে (এবং ব্যবহার করতে) চান তবে এটি কার্যকর is

বাশ 4 এ:

touch file{001..010}.txt

"file010.txt" এর মাধ্যমে "file001.txt" নামে ফাইল তৈরি করবে। তাদের নাম প্রত্যাশিত ক্রম অনুসারে বাছাই করা হবে। শীর্ষস্থানীয় শূন্যগুলি ছাড়াই "file10.txt" "ফাইল1.txt" এর আগে বাছাই করবে।

ফাইলগুলির সাথে কাজ করতে, আপনি একই শীর্ষস্থানীয় শূন্য সিনট্যাক্স ব্যবহার করতে পারেন:

for file in file{001..010}.txt; do echo "$file"; done

বাশ 3-তে, আপনার যদি শীর্ষস্থানীয় শূন্যগুলির প্রয়োজন হয় তবে আপনাকে নিজের মানটি প্যাড করতে হবে:

for i in {1..10}
do
    printf -v i '%03d' $i 
    echo "file${i}.txt"
done

printfবিবৃতি বসানো শূন্যগুলি সঙ্গে তোমার মান পূর্বে লিখুন যাতে প্রস্থ 3, উদাহরণস্বরূপ ( "4" "২004" হয়ে)।

সম্পাদনা:

ফাইলের নামগুলিতে ফাঁকা জায়গাগুলি সহজবোধ্য:

$ touch "space name "{008..018..3}" more spaces"
$ ls -l sp*
-rw-r--r-- 1 user group 0 2011-01-22 11:48 space name 000008 more spaces
-rw-r--r-- 1 user group 0 2011-01-22 11:48 space name 000011 more spaces
-rw-r--r-- 1 user group 0 2011-01-22 11:48 space name 000014 more spaces
-rw-r--r-- 1 user group 0 2011-01-22 11:48 space name 000017 more spaces
$ for f in "space name "{008..018..3}" more spaces"; do mv "$f" "${f}.txt"; done
$ ls -l sp*
-rw-r--r-- 1 user group 0 2011-01-22 11:48 space name 000008 more spaces.txt
-rw-r--r-- 1 user group 0 2011-01-22 11:48 space name 000011 more spaces.txt
-rw-r--r-- 1 user group 0 2011-01-22 11:48 space name 000014 more spaces.txt
-rw-r--r-- 1 user group 0 2011-01-22 11:48 space name 000017 more spaces.txt

ধন্যবাদ! আমি জানি না এটি আমার সারাজীবন কোথায় ছিল। আমি যে জিনিসটিতে কাজ করতে পারি না তা হ'ল বর্ধনের ব্যাকের ওএসএক্স সংস্করণে কাজ করা মনে হয় না। যেমন, আমি {1..10..2}আমার ওএসএক্স ব্যাশে কাজ করতে পারি না ।
দুধপোস্টম্যান

ঠিক আছে, এটি তুষার চিতা (কোনও কারণে) বাশ ৩.১ ব্যবহার করছে। এটি একটি সফ্টওয়্যার সমস্যা।
মিলিপোস্টম্যান

@ মিল্কিপোস্টম্যান: বর্ধিত বৈশিষ্ট্য এবং শীর্ষস্থানীয় শূন্যগুলি {01..10}বাশ ৪-তে নতুন You আপনার যদি বর্ধিত বৈশিষ্ট্য প্রয়োজন হয় বা সীমার সীমার জন্য ভেরিয়েবলগুলি ব্যবহার করতে চান তবে এই ফর্মটি ব্যবহার করুন: for ((i=1; i<=10; i+=2}(বা i++একের সাথে বাড়ানোর জন্য)। সংখ্যার যে কোনওটি ভেরিয়েবল বা এক্সপ্রেশন হতে পারে। তারপরে, লুপটির অভ্যন্তরে মানটি ব্যবহার করতে for: echo "file${i}.txt". In Bash 3, if you need leading zeros, inside the for loop do: printf -vi '% 03d' $ i` যা iনেতৃস্থানীয় শূন্যগুলির সাথে মানকে প্রিপেন্ড করবে তাই প্রস্থটি 3, উদাহরণস্বরূপ ("4" "004" হয়ে যায়)।
পরবর্তী বিজ্ঞপ্তি না হওয়া পর্যন্ত বিরতি দেওয়া হয়েছে।

ডেনিস, বিকল্প ফর্মটি অন্তর্ভুক্ত করার জন্য আপনার সমাধানটি আপডেট করার কোনও উপায় আছে কি? একটি মন্তব্য হওয়ার কারণে এটি সম্ভবত আমার যা পাওয়ার কথা তা অবাক করে দিচ্ছে।
মিলিপোস্টম্যান

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