আমি কি এই ফিল্টারটি সংক্ষিপ্ত করতে পারি, এটি 100G এর চেয়ে বেশি ডিস্কের আকার খুঁজে পাবে?


12

আমার লক্ষ্য lsblk থেকে 100G এর চেয়ে বড় ডিস্কগুলি পাওয়া।

আমার এটি কাজ করছে তবে এটি বিশ্রী। আমি নিশ্চিত যে এটি ছোট করা যেতে পারে। হয় lsblk এর চেয়ে সম্পূর্ণ আলাদা কিছু ব্যবহার করে, বা আমি সরাসরি মানব পাঠযোগ্য সংখ্যাগুলি জোর দিয়ে ফিল্টার করতে পারি।

আমি একসাথে যা রেখেছি তা এখানে:

lsblk | grep disk | awk '{print$1,$4}' | grep G | sed 's/.$//' | awk '{if($2>100)print$1}'

এটি 100G এর চেয়ে বড় ডিস্কগুলির কেবলমাত্র এসডিএক্স এবং এনভিএমএক্সএক্সএক্সএক্স অংশকে আউটপুট করে। ঠিক আমার যা প্রয়োজন

আমি এতে খুশি, তবে আপনার কাছ থেকে গুরুসকে আরও শিখতে আগ্রহী 😉


১০০-৯৯৯ জিবি এবং ১০০ টির চেয়ে বড়, তবে আমি অনুমান করি যে 1-99T এর মধ্যে কিছুই নেই? (টেরাবাইটস ~)
হ্যানশেনরিক ২১ শে

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

উত্তর:


28

আপনি যে আউটপুটটি চান তা থেকে নির্দিষ্ট করতে পারেন lsblk:

% lsblk -nblo NAME,SIZE
mmcblk0   15931539456
mmcblk0p1   268435456
mmcblk0p2 15662038528

বিকল্পগুলি ব্যবহৃত :

-b, --bytes
      Print the SIZE column in bytes rather than in human-readable format.

-l, --list
      Use the list output format.

-n, --noheadings
      Do not print a header line.

-o, --output list
      Specify which output columns to print.  Use --help to get a list of  all  supported
      columns.

তারপরে ফিল্টারিং সহজ:

% lsblk -nblo NAME,SIZE | awk '$2 > 4*2^30 {print $1}' # greater than 4 GiB
mmcblk0
mmcblk0p2

আপনার ক্ষেত্রে এটি 100*2^30100GiB বা 100e9/ 1e11100GB এর জন্য হবে।


উহহ, এতো চালাক! প্রথমে কী প্রয়োজন নেই তা বাইরে বের করে আছি। একটি প্রশ্ন: আপনি x * 2 ** 30 কেবলমাত্র বাইটগুলির সাথে সঙ্গতি রেখে ব্যবহার করছেন? S.th ব্যবহার করার ক্ষেত্রে কি কোনও ত্রুটি রয়েছে? 10 ** 3 এর মতো?
চাল্যবিয়াম

হ্যাঁ, বাইটের জন্য না, আপনি 10 ** 9 ব্যবহার করতে পারেন। মানগুলি খুব বেশি আলাদা হয় না।
মুড়ু

মনে রাখবেন যে ওপি ওয়ান-লাইনারে পার্টিশনগুলি ফিল্টার করছে।
চাচা কার্ল


1
নোট করুন যে 100G সীমানা বিশিষ্টের এই বিশেষ ক্ষেত্রে egrep '\d{12,}'একটি ক্রমানুসারে <12 অঙ্কের লাইনগুলি সরিয়েও ছোট করা যেতে পারে । আওক অবশ্যই আরও সার্বজনীন।
জ্ঞানডিফ

18

আপনি lsblkJSON ফর্ম্যাটে আউটপুট করতে এবং ফিল্টারিং এর মাধ্যমে বলতে পারেন jq:

$ lsblk -Jb | jq -r '..|select(.size? >= 1e11).name'
sda
sda2

বা:

$ lsblk -Jb | jq -r '..|select(.type? == "disk" and .size? >= 1e11).name'
sda

টাইপ এন্ট্রি সীমাবদ্ধ করতে disk

( 1e11100 গিগাবাইট হচ্ছে। দিয়ে প্রতিস্থাপন করুন 107374182400বা ( 100*1024*1024*1024কারণ rounding, 100 GiB জন্য)। lsblkনিজেই ছাড়া -b(রিপোর্ট সম্পর্কে 99,9278 থেকে 100,0488 GiB পর্যন্ত মাপ জন্য 100 গ্রাম কোনো কারণে))

সহ lsblk -OJb, lsblkসমস্ত উপলভ্য তথ্য প্রতিবেদন করে যা আপনাকে আরও সূক্ষ্ম-দানাযুক্ত নির্বাচন করতে বা আরও বা আরও প্রাসঙ্গিক তথ্য আউটপুট দেয়।

আপনি সরাসরি থেকে তথ্য পেতে পারে /sys। সহ zsh:

$ printf '%s\n' /sys/class/block/*(e'[(($(<$REPLY/size) * 512 >= 1e11))]':t)
sda
sda2

এটি কোনও গুরুের সঠিক উত্তর, কেউ এটি পড়তে সক্ষম হবে না। : ডি
আরচেমার

আমি এটি জানতে একটি সুন্দর হিসাবে গ্রহণ। তবে ব্যাশে আমার যাত্রার এই পর্যায়ে আমি আর একটি সরঞ্জাম ব্যবহার করে আরও জটিলতার পরিচয় দিতে চাই না।
চাল্যবিয়াম

এটি একটি দুর্দান্ত অ্যাপ্লিকেশন jq(যা আমি মাত্র কয়েক মাস আগে জেনেছি)।
দুবু

6

চেষ্টা

lsblk| awk '$4 ~ /G$/ && $4+0 > 100 {print $1}'

এটি একই সাথে গ্রেপ এবং ফিল্টার হবে।

  • $4 ~ /G$/ জি আকারে ফাইল করুন
  • $4+0 > 100 100G এর বেশি আকার পান
  • {print $1} NAME মুদ্রণ করুন

একটি নিয়ম হিসাবে আপনি ব্যবহার করার প্রয়োজন নেই উচিত grepএবং awkএকই পাইপে।

কেবলমাত্র ডিস্ক পেতে (এবং কোনও বিভাজন নেই): অজক ফিল্টারিং

lsblk| awk '$4 ~ /G$/ && $4+0 > 100 && $6 == "disk"  {print $1}'

কোথায়

  • $6 == "disk" ডিস্ক সহ কেবল কলাম নির্বাচন করুন

শুধুমাত্র ডিস্ক পেতে (এবং কোনও বিভাজন নেই): lsblk ফিল্টারিং

lsblk --nodeps| awk '$4 ~ /G$/ && $4+0 > 100 {print $1}'

কোথায়

  • --nodeps : -d, - নোডেপগুলি দাস বা ধারকদের মুদ্রণ করে না

প্রায় সেখানে. এটি এখনও পার্টিশন প্রিন্ট করে। তবে আমার মনে হয় যখন আমি কিছুটা ফ্রি সময় পাই তখন আমি তা পিছনে পেতে পারি।
চাল্যবিয়াম

1
@ চ্যালিবিয়াম আমি স্থির করেছি যে, একই ফিল্টারিং ট্রিকটি মুরুর উত্তরে প্রয়োগ করা যেতে পারে।
আরচেমার

(যদিও আমি সম্ভবত ব্যবহার করতে চাই --no-depsবিকল্প, পালন যে উত্তর সাধারণ শৈলী সঙ্গে)
muru

2
আমি আশঙ্কা করি যে এটির ডিস্কগুলি ধরতে ব্যর্থ হবে যার আকার টেরাবাইটে (বা আরও বড় ইউনিট) দেখানো হয়েছে।
ফ্রে-সান

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