বাশ ফরচ লুপ


158

আমার একটি ইনপুট রয়েছে (আসুন একটি ফাইল বলি)। প্রতিটি লাইনে একটি ফাইলের নাম রয়েছে। আমি কীভাবে এই ফাইলটি পড়তে পারি এবং প্রতিটিটির জন্য সামগ্রীটি প্রদর্শন করতে পারি।

উত্তর:


234

এরকম কিছু কাজ করবে:

xargs cat <filenames.txt

xargsপ্রোগ্রাম তার মান ইনপুট সার্চ, এবং ইনপুট প্রতিটি লাইন জন্য রান catযুক্তি (গুলি) যেমন ইনপুট লাইনের প্রোগ্রাম।

আপনি যদি সত্যিই কোনও লুপটিতে এটি করতে চান তবে আপনি এটি করতে পারেন:

for fn in `cat filenames.txt`; do
    echo "the next file is $fn"
    cat $fn
done

3
ফাইলনামগুলিতে স্পেস থাকলে এই দুটিই কাজ করে না।
mivk

@ এমভেক আপনি স্থানটি থেকে পালাতে পারবেন
টুচকা


18

এখানে একটি whileলুপ:

while read filename
do
    echo "Printing: $filename"
    cat "$filename"
done < filenames.txt

এটি সর্বোত্তম পদ্ধতির হওয়া উচিত। আপনি '-r' & '-d' বিকল্পটি ব্যবহার করতে পারেনread
সজসাম

1
এখানে অন্যান্য বেশিরভাগ উত্তরের মতো নয়, ফাইলের নামগুলিতে শূন্যস্থান থাকা সত্ত্বেও এটি একটি আসলে কাজ করে।
mivk


4

আপনি সম্ভবত আপনার ফাইলের নামগুলিতে ফাঁকা স্থানগুলি পরিচালনা করতে চাইবেন, যদিও সেগুলি ঘৃণিত হয় :-)

সুতরাং আমি প্রাথমিকের মতো কিছু পছন্দ করবো:

pax> cat qq.in
normalfile.txt
file with spaces.doc

pax> sed 's/ /\\ /g' qq.in | xargs -n 1 cat
<<contents of 'normalfile.txt'>>
<<contents of 'file with spaces.doc'>>

pax> _


0

তাদের সকলের যদি একই এক্সটেনশন থাকে (উদাহরণস্বরূপ .jpg), আপনি এটি ব্যবহার করতে পারেন:

for picture in  *.jpg ; do
    echo "the next file is $picture"
done

(ফাইলের নাম ফাঁকা থাকলে এই সমাধানটিও কাজ করে)

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