ফাইল সংখ্যা গণনা করতে স্ক্রিপ্টে বাশ করুন


11

আমার কাছে একটি স্ক্রিপ্ট রয়েছে এবং যদি ফাইল উপস্থিত থাকে বা না থাকে তবে আমি বিভিন্ন বার্তা প্রদর্শন করতে চাই। আমার মতো স্ক্রিপ্ট রয়েছে:

count=ls /import/*.zip | wc -l

echo "Number of files: " $count
if [ "$count" > "0" ]; then
    echo "Import $count files"
else
    echo "**** No files found ****"
fi

তবে, যদি কোনও ফাইল বিদ্যমান না থাকে তবে No such file or directory0 টি ফাইলের পরিবর্তে এটি প্রদর্শিত হচ্ছে। ডিরেক্টরিতে একটি ডিরেক্টরি আছে /import/, সুতরাং আমি কেবল একটি lsআদেশ করতে পারি না কারণ এটি সর্বদা 0 এর চেয়ে বড় মান প্রদান করে।

আমি কীভাবে একটি নির্দিষ্ট এক্সটেনশনের ফাইলগুলির সংখ্যা (.zip, .gz, ইত্যাদি) গণনা করতে পারি এবং ফাইলের সংখ্যা প্রদর্শন করতে উভয় ক্ষেত্রে ব্যাশ স্ক্রিপ্টে সেই মানটি ব্যবহার করতে পারি এবং তারপরে এটি পৃথক বার্তা প্রদর্শন করতে যদি বিবৃতিতে ব্যবহার করতে পারি?

উত্তর:


15

count=$(find /import -maxdepth 1 -name '*.zip' | wc -l)


1
আমি বর্তমান ডিরেক্টরিতে কেবল ফাইলগুলি গণনা করতে -ম্যাক্সডেপথ 1 যুক্ত করেছি
ওয়ালেস শান

1
আপনি যখন ইচ্ছুক থাকবেন তখন বর্তমান ডিরেক্টরিতে কোনও .zip ফাইল রয়েছে এমন ক্ষেত্রে আপনি সম্ভবত '* .zip' উদ্ধৃতি দিতে চান, সেক্ষেত্রে শেলটি আপনার জন্য * .zip প্রসারিত করবে, আপনি যখন চান যে এটি সন্ধান করতে চান (1)।
ফিল পি

4

এটি দিয়ে চেষ্টা করুন:

count=$(find /import/ -maxdepth 1 -type f -name '*.zip' | wc -l)
...
if [ $count -gt 0 ] ; then
  ...
else
  ...
fi

ধারণাটি হ'ল "এ জাতীয় কোনও ফাইল নয়" ত্রুটিটি এটি বিটবাকেটে প্রেরণ করে এসটিডিআরআরে প্রিন্ট হয়ে যায় এবং সংখ্যার তুলনা করার জন্য সঠিক পরীক্ষার ফাংশনটি ব্যবহার করে। ( -gt"তার চেয়ে অনেক বেশী" জন্য দাঁড়িয়েছে। এছাড়াও আছে -eq, -lt, -ge, ইত্যাদি)


বিকল্প হিসাবে, count=$(find /import -type f -name "*.zip" | wc -l)
আপনিও

নিশ্চিত, তবে ls /import/*.zipসাবডিরেক্টরিগুলি থাকলে তার আলাদা অর্থ রয়েছে
মাদুর

সাব-ডাইরেক্টরিগুলিতে ফাইল গণনা এড়াতে আমি ম্যাক্সডেপথ সেট করেছি এবং স্ক্রিপ্টটি -gt ব্যবহার করার জন্য আপডেট করেছি। সহায়তার জন্য ধন্যবাদ
ওয়ালেস শান

ডিরেক্টরিতে অনুরোধের জন্য আরগভি-তে ফিট করার জন্য ডিরেক্টরিতে অনেক বেশি ফাইল থাকলে এটি ব্যর্থ হয়।
ফিল পি

আহ ঠিক. findবৈকল্পিক সহ সংশোধন করা হয়েছে ।
মাদুর

0

আমি আপনার স্ক্রিপ্টটি চেষ্টা এবং, আশানুরূপ যখন কোন ফাইল মেলানো হয় এটা করে আউটপুটে 0 ফাইল দেন, কিন্তু দেখায় lsঠিক আগে ত্রুটি। এটি সমাধান করা বেশ সহজ, খাঁজ দেওয়ার দরকার নেই ls। এটির সাহায্যে প্রথম লাইনটি প্রতিস্থাপন করুন:

count=$(ls /import/*.zip 2>/dev/null| wc -l)

2>/dev/null/dev/nullত্রুটি বার্তাটি দমন করে স্ট্যাডারকে পুনর্নির্দেশ করে ।

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