user4556274 ইতিমধ্যে উত্তর দেওয়া হয়েছে কেন । আমার উত্তরটি কীভাবে ফাইলগুলি সঠিকভাবে গণনা করতে পারে তার জন্য অতিরিক্ত তথ্য সরবরাহ করে to
ইউনিক্স সম্প্রদায়ে সাধারণ sens কমত্য হল আউটপুট পার্স করা ls
খুব খারাপ ধারণা , যেহেতু ফাইলের নামগুলিতে নিয়ন্ত্রণের অক্ষর বা লুকানো অক্ষর থাকতে পারে। উদাহরণস্বরূপ, একটি ফাইলনামে একটি নতুন লাইন চরিত্রের কারণে, আমরা ls | wc -l
আমাদের জানিয়েছি যে আউটপুটটিতে 5 টি লাইন রয়েছে ls
(এটি রয়েছে) তবে বাস্তবে ডিরেক্টরিতে কেবল 4 টি ফাইল রয়েছে।
$> touch FILE$'\n'NAME
$> ls
file1.txt file2.txt file3.txt FILE?NAME
$> ls | wc -l
5
পদ্ধতি # 1: ইউটিলিটি সন্ধান করুন
find
কমান্ড, যা সাধারণত কাজ করছে ফাইলের নামের পার্স জন্য ব্যবহৃত হয়, আমাদের এখানে মুদ্রণ করে সাহায্য করতে পারেন inode সংখ্যা । এটি ডিরেক্টরি বা একটি ফাইল হোন, এর কেবলমাত্র একটি অনন্য ইনড নম্বর রয়েছে। সুতরাং, ব্যবহার করে -printf "%i\n"
এবং বাদ .
দিয়ে -not -name "."
আমাদের ফাইলগুলির একটি সঠিক গণনা থাকতে পারে। ( -maxdepth 1
সাব-ডিরেক্টরিতে পুনরাবৃত্তির উত্থান প্রতিরোধের ব্যবহারের জন্য দ্রষ্টব্য )
$> find -maxdepth 1 -not -name "." -print
./file2.txt
./file1.txt
./FILE?NAME
./file3.txt
$> find -maxdepth 1 -not -name "." -printf "%i\n" | wc -l
4
পদ্ধতি # 2: গ্লোবস্টার
সহজ, দ্রুত এবং বেশিরভাগ বহনযোগ্য উপায়:
$ set -- *
$ echo $#
228
set
কমান্ডটি শেলের অবস্থানগত পরামিতি নির্ধারণ করতে ব্যবহৃত হয় ( $<INTEGER>
যেমন ভেরিয়েবলগুলি echo $1
)। এটি প্রায়শই /bin/sh
অ্যারের অভাব সীমাবদ্ধতার কাজ করতে ব্যবহৃত হয় । অতিরিক্ত চেক সম্পাদনা করে এমন একটি সংস্করণ ইউনিক্স এবং লিনাক্সের গিলির উত্তরে পাওয়া যাবে ।
অ্যারেগুলিকে সমর্থন করে এমন শেলগুলিতে যেমন bash
আমরা ব্যবহার করতে পারি
items=( dir/* )
echo ${#items[@]}
মন্তব্যগুলিতে স্টিল্ড্রাইভার দ্বারা প্রস্তাবিত হিসাবে ।
find
পদ্ধতিতে অনুরূপ কৌশল যা wc
গ্লোবস্টারের সাথে stat
প্রতি লাইনে ইনোড সংখ্যা গণনা করতে ব্যবহার করা যেতে পারে :
$> LC_ALL=C stat ./* --printf "%i\n" | wc -l
4
বিকল্প বিকল্পটি for
লুপে একটি ওয়াইল্ডকার্ড ব্যবহার করা । (দ্রষ্টব্য, এই পরীক্ষাটি সাব-ডিরেক্টরিতে নেমেছে কিনা তা পরীক্ষা করার জন্য এই পরীক্ষাটি আলাদা ডিরেক্টরি ব্যবহার করে, যা এটি না - 16 আমার আইটেমের যাচাই করা সংখ্যা ~/bin
)
$> count=0; for item in ~/bin/* ; do count=$(($count+1)) ; echo $count ; done | tail -n 1
16
পদ্ধতি # 3: অন্যান্য ভাষা / দোভাষী
পাইথন আমার os.listdir()
ফাংশন প্রদত্ত তালিকার দৈর্ঘ্যের মুদ্রণের মাধ্যমে সমস্যাযুক্ত ফাইলের নামগুলিও মোকাবেলা করতে পারে (যা পুনরাবৃত্তিযোগ্য নয় এবং কেবল যুক্তি হিসাবে দেওয়া ডিরেক্টরিতে আইটেমগুলি তালিকাভুক্ত করবে)।
$> python -c "import os ; print os.listdir('.')"
['file2.txt', 'file1.txt', 'FILE\nNAME', 'file3.txt']
$> python -c "import os ; print(len(os.listdir('.')))"
4
আরো দেখুন
ls | wc -l
যদি ফাইলনামে একটি নতুন লাইনযুক্ত ফাইল থাকে তবে ব্যর্থ হবে। এটি আরও স্থিতিস্থাপক:find . -mindepth 1 -maxdepth 1 -printf . | wc -c