ডিরেক্টরিতে সমস্ত ফাইলকে পুনরাবৃত্তভাবে গণনা করুন [সদৃশ]


198

সম্ভাব্য সদৃশ:
লিনাক্স ব্যবহার করে কোনও ড্রাইভের ফোল্ডারের সংখ্যা আমি কীভাবে গণনা করতে পারি?

আমার লিনাক্স বাক্সে আমার খুব গভীর ডিরেক্টরি রয়েছে tree আমি সাব-ডাইরেক্টরিগুলি সহ সেই পথের সমস্ত ফাইল গণনা করতে চাই।

উদাহরণস্বরূপ, এই ডিরেক্টরি ট্রি দেওয়া:

/home/blue
/home/red
/home/dir/green
/home/dir/yellow
/home/otherDir/

আমি যদি পাস করে /homeযাই তবে আমি এটি চাই যাতে চারটি ফাইল ফিরে আসে। বা, বোনাস পয়েন্ট যদি এটি চারটি ফাইল এবং দুটি ডিরেক্টরি ফেরত দেয়। মূলত, আমি উইন্ডোজের কোনও ফোল্ডারে ডান-ক্লিক করা এবং বৈশিষ্ট্য নির্বাচন করা এবং সেই ফোল্ডারে কতগুলি ফাইল / ফোল্ডার রয়েছে তা সমপরিমাণটি চাই।

আমি কীভাবে খুব সহজে এটি করতে পারি? আমার লেখা পাইথন স্ক্রিপ্টের সাথে আমার একটি সমাধান রয়েছে, তবে কেন এটি চলমান ls | wcবা অনুরূপের মতো সহজ নয় ?


আপনি যা খুঁজছেন ঠিক তা নয়, তবে আপনার locateডাটাবেসটি আপ টু ডেট থাকলে: locate /some/path | wc -l(বা আমার ম্যাকে locate -c /some/path:) a তবে: এটিতে ফাইলগুলিও গণনা করা যাবে এবং /this/other/path/with/some/pathফোল্ডারগুলি সেগুলিই গণনা করবে।
আরজান

: যাইহোক, এই একটি ভিন্ন, কিন্তু ঘনিষ্ঠভাবে সম্পর্কিত সমস্যা (ক ড্রাইভে সব ডিরেক্টরি বেড়ে চলেছে) এবং সমাধান superuser.com/questions/129088/...
আমান্ডা

উত্তর:


340

find . -type f | wc -l

ব্যাখ্যা: এই ( ) ডিরেক্টরিতে এবং সমস্ত উপ ডিরেক্টরিতে
find . -type fসমস্ত ফাইল ( -প্রকার চ ) সন্ধান করে , ফাইলের নামগুলি পরে প্রতি লাইনে একটিতে প্রিন্ট করা হয়।

এটি তখন পাইপ করা হয় | মধ্যে wc(শব্দ গণনা) -lবিকল্প wc-শুধুমাত্র তার ইনপুট লাইনের গণনা বলে।

একসাথে তারা আপনার সমস্ত ফাইল গণনা করে।


1
findআউটপুট থেকে শেষের নতুন
লাইনটির

কেবলমাত্র ডিরেক্টরি গণনা করার জন্য, '-type f' এর পরিবর্তে '-type d' ব্যবহার করুন: ডি
মেভলেটজডেমির

1
যখন কোন ফাইল পাওয়া যায়, ফলে1
Dylanthepiguy

47

উপরের উত্তরগুলি ইতিমধ্যে প্রশ্নের উত্তর দিয়েছে, তবে আমি যুক্ত করব যে আপনি যদি যুক্তি ছাড়াই (আপনি যে ফোল্ডারটি সন্ধান করতে চান সেখানে বাদে) সন্ধান করেন তবে:

find . | wc -l

অনুসন্ধানটি তাত্ক্ষণিকভাবে প্রায় দ্রুত চলে যায় বা কমপক্ষে এটি আমার জন্য হয় does এর কারণ এই ধরণের ক্লজটি প্রতিটি নামের প্রকারটি পরীক্ষা করতে স্ট্যাট () সিস্টেম কল চালাতে হয় - বাদ দিয়ে এটিকে করা এড়ানো হয়।

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


1
যখন কোন ফাইল পাওয়া যায়, ফলে1
Dylanthepiguy

25

ফাইলগুলির জন্য:

find -type f | wc -l

ডিরেক্টরিগুলির জন্য:

find -mindepth 1 -type d | wc -l

তারা উভয়ই বর্তমান ওয়ার্কিং ডিরেক্টরিতে কাজ করে।


1
যখন কোন ফাইল পাওয়া যায়, ফলে1
Dylanthepiguy

8

বাশ 4+ সহ

shopt -s globstar
for file in **/*
do
  if [ -d "$file" ];then
    ((d++))
  elif [ -f "$file" ];then
     ((f++))
  fi
done
echo "number of files: $f"
echo "number of dirs: $d"

আপনি ফাইল এবং ডিরেক্টরি অনুসন্ধান করতে চাইলে দুবার কল করার দরকার নেই


8

গ্রহণযোগ্য উত্তরের জন্য সামান্য আপডেট, আপনি যদি একটি ডায়ার এবং এর মতো একটি গণনা চান

find $DIR -exec stat -c '%F' {} \; | sort | uniq -c | sort -rn

1
উপর একটি ম্যাক / বাসদ : find $DIR -exec stat -f '%HT' {} \; | sort | uniq -c | sort -rn(এখানে টাইপ %Tএকটি নিয়মিত ফাইল, একটি এক্সিকিউটেবল ফাইল, অথবা একটি ফোল্ডারের জন্য স্ল্যাশ জন্য একটি তারকা জন্য খালি নেই; অত: পর %HTপ্রয়োজন হয়, অথবা কিছু অতিরিক্ত টেক্সট স্থান গণনা করা হচ্ছে থেকে, মত এড়াতে > %T। )
আরজান

দেয় আমাকে "খুঁজে: অবৈধ বিকল্প - E" এ আমার 10.13.6 ম্যাক
কে-মাইকেল আয়ে
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.