ফাইলের নাম সম্প্রসারণ (গ্লোববিং) সর্বাধিক রয়েছে এবং যদি তা হয় তবে তা কী?


11

ফাইলের নাম সম্প্রসারণ (গ্লোববিং) সর্বাধিক রয়েছে এবং যদি তা হয় তবে তা কী? দেখুন globbing tldp.org উপর।

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

grep -e bar foo*
rm -f bar*

বাশ কত ফাইলগুলিতে প্রসারিত হবে তার কোনও সীমা আছে এবং যদি তাই হয় তবে তা কী?

আমি এই অপারেশনগুলি সম্পাদনের বিকল্প উপায়গুলি খুঁজছি না (যেমন ব্যবহার করে find)।



2
আরও দেখুন: কোন কমান্ড একক আর্গুমেন্টের জন্য সর্বোচ্চ আকারকে কী সংজ্ঞা দেয়? বর্তমান লিনাক্স সিস্টেমে একক যুক্তির আকার এবং মোট আকারের জন্য আলাদা আলাদা সীমা রয়েছে। পরেরটি স্ট্যাকের আকার সীমাটির উপর নির্ভর করে।
ilkkachu

উত্তর:


17

bashগ্লোব দ্বারা প্রসারিত হওয়া ফাইলগুলির সংখ্যার কোনও সীমা নেই (উপলভ্য মেমরি ব্যতীত) ।

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

আরও তথ্যের জন্য, দেখুন:

এই সীমাটি ঘিরে কাজ করার জন্য, আপনি ব্যবহার করতে পারেন (জিএনইউ xargsবা সামঞ্জস্য ধরে ):

printf '%s\0' foo* | xargs -r0 rm -f

উপরে, যেহেতু printfঅন্তর্নির্মিত ( bashবেশিরভাগ বোর্নের মতো শেলস), তাই আমরা execve()সীমাটি আঘাত করি না । এবং সীমাবদ্ধতা এড়ানোর জন্য প্রয়োজনীয় xargsযুক্তিগুলির তালিকাটিকে rmযতগুলি নিমন্ত্রণে বিভক্ত করবে execve()

সহ zsh:

autoload zargs
zargs foo* -- rm -f

সহ ksh93:

command -x rm -f foo*

7

আপনি এখানে যুক্তিগুলির মোট আকারের সীমাটি দেখতে পারেন:

getconf ARG_MAX

এটি সাধারণত শেল দ্বারা নয়, এই উত্তর অনুসারে অন্তর্নিহিত অপারেটিং সিস্টেম দ্বারা নির্ধারিত হয় ।


2
আমি মনে করি এটি মোট দৈর্ঘ্য, সংখ্যা নয়?
ilkkachu

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