একটি লিনাক্স ডিরেক্টরিতে পুনরাবৃত্তভাবে ফাইলগুলি গণনা করা হচ্ছে


728

আমি কীভাবে একটি লিনাক্স ডিরেক্টরিতে পুনরাবৃত্তভাবে ফাইলগুলি গণনা করতে পারি?

আমি এটি খুঁজে পেয়েছি:

find DIR_NAME -type f ¦ wc -l

কিন্তু যখন আমি এটি চালনা করি এটি নিম্নলিখিত ত্রুটিটি প্রদান করে।

সন্ধান করুন: পাথ অবশ্যই প্রকাশের পূর্বে অবশ্যই: ¦


64
আপনি ইউনিক্স পাইপলাইনের জন্য ব্যবহৃত ¦উল্লম্ব বার |(ASCII 124) দিয়ে ভাঙা বার (ASCII 166) গুলিয়ে ফেলছেন
স্কিপি লে গ্র্যান্ড গৌরোগ

7
@ স্কিপাইল গ্র্যান্ড গৌড়ো কি একে পাইপ বলা হয় না?
ডেভস্টেফেন্স

27
@ ডেভস্টেফেন্স হ্যাঁ, এটিকে এটিও বলা হয়। একে শেফার স্ট্রোক, ভার্টি-বার, ভিবার, স্টিক, উল্লম্ব লাইন, উল্লম্ব স্ল্যাশ, বার, ওবলিস্ক, গ্লিডাসও বলা হয়।
Emlai

64
@ জেনিথ আমি কেবল এটিকে বব বলেছি।
ক্রিস্টোফার

15
আরএফসি 20 এ একে "উল্লম্ব লাইন" বলা হয়। "পাইপ" হ'ল প্রতীকটির নামের পরিবর্তে শেল অপারেটরের নাম। ঠিক যেমন *"অ্যাসিটার্ক্ক" এএসসিআইআই চরিত্র, তবে অন্য কয়েকটি প্রসঙ্গে "বার"।
পাতলা

উত্তর:


1325

এই কাজ করা উচিত:

find DIR_NAME -type f | wc -l

ব্যাখ্যা:

  • -type f শুধুমাত্র ফাইল অন্তর্ভুক্ত।
  • |( এবং না¦ ) findকমান্ডের স্ট্যান্ডার্ড ইনপুটটিতে কমান্ডের স্ট্যান্ডার্ড আউটপুটটিকে পুনঃনির্দেশ করে wc
  • wc(শব্দের গণনার জন্য সংক্ষিপ্ত) এর ইনপুট ( ডক্স ) এ নতুন লাইন, শব্দ এবং বাইট গণনা করে ।
  • -l শুধু নিউলাইন গণনা।

মন্তব্য:

  • বর্তমান ফোল্ডারে কমান্ড কার্যকর করতে এর DIR_NAMEসাথে প্রতিস্থাপন করুন .
  • আপনি -type fডিরেক্টরিতে (এবং প্রতিলিঙ্কগুলি) গণনায় অন্তর্ভুক্ত করতেও মুছে ফেলতে পারেন ।
  • যদি ফাইলের নামগুলিতে নতুন লাইন অক্ষর থাকতে পারে তবে এই কমান্ডটি অতিরিক্ত অঙ্ক করবে।

আপনার উদাহরণ কেন কাজ করে না তার ব্যাখ্যা:

আপনি যে কমান্ডটি দেখিয়েছেন তাতে আপনি "পাইপ" ( |) দুটি ধরণের কমান্ডকে সংযুক্ত করতে ব্যবহার করেন না , তবে ভাঙা বার ( ¦) যা শেলটি কমান্ড বা এর অনুরূপ কিছু হিসাবে স্বীকৃতি দেয় না। এজন্য আপনি সেই ত্রুটি বার্তাটি পান।


26
fমধ্যে -type fফাইলের জন্য এবং ঘোরা wc -lশব্দ গণনা লাইনের জন্য।
সার্জ Stroobandt

3
-type fগণনাতে ডিরেক্টরিগুলি অন্তর্ভুক্ত করার জন্য সরান
ফ্যাটব্লাট

3
-printপতাকাটির জন্য কোনও প্রয়োজন নেই
জোল্টন

3
যদি কোনও সম্ভাবনা থাকে তবে ফাইলের নামগুলিতে নিউলাইন চরিত্রটি রয়েছে যা আপনি -print0পতাকাটি ব্যবহার করতে চাইতে পারেন ।
গ্যাবরোনক্যানসিও

2
@ গ্যাবোর্নক্যানসিও এটি কিছুতেই সহায়তা করবে না, যদি না কিছু বাস্তবায়নের কাছে wcবাতিল নষ্ট হওয়া তালিকাটি পড়ার বিকল্প না থাকে। একটি বিকল্প জন্য আমার উত্তর দেখুন।
মনিকা পুনরায় ইনস্টল করুন

100

বর্তমান ডিরেক্টরিতে:

find -type f | wc -l

5
এই সমাধানটি এমন ফাইল ফাইল নেবে না যাতে অ্যাকাউন্টগুলিতে নিউলাইন থাকে।
কুসালানন্দ

2
বর্তমান ডিরেক্টরির জন্য, আপনি এমনকি প্রয়োজন হবে না.
baptx

1
আসলে, কিছু প্ল্যাটফর্মের উপর, আপনি কি বানান প্রয়োজনfind .
tripleee

1
@ কুসালানন্দ্রা আপনার মন্তব্যটি এখানে প্রায় প্রতিটি উত্তরের জন্য প্রযোজ্য।
ট্রিপল

69

আপনি যদি আপনার বর্তমান দিরের অধীনে প্রতিটি দিরে কতগুলি ফাইল রয়েছে তার একটি ব্রেকডাউন চান:

for i in */ .*/ ; do 
    echo -n $i": " ; 
    (find "$i" -type f | wc -l) ; 
done

অবশ্যই এটি এক লাইনে যেতে পারে। প্যারেন্সেসিস স্পষ্ট করে দেয় wc -lকার আউটপুটটি পর্যবেক্ষণ করা হচ্ছে ( find $i -type fএই ক্ষেত্রে)।


7
এটি তাদের নামে ফাঁকা স্থানের ডিরেক্টরিতে আটকে যেতে পারে। প্রথম find . -maxdepth 1 -type d -print0 | while IFS= read -r -d '' i ; doপংক্তিকে এটি ঠিক করার জন্য পরিবর্তন করা হচ্ছে । দেখুন কীভাবে আমি কোনও ফাইল (ডেটা স্ট্রিম, ভেরিয়েবল) লাইন বাই লাইন (এবং / অথবা ক্ষেত্রের বাইরের ক্ষেত্র) পড়তে পারি?
আর্চ স্টান্টন

4
findবাইরের লুপের জন্য ব্যবহার করা কেবল অযথা জটিলতা। for i in */; do`
tripleee

ফাংশন গণনা {আমি ইন $ এর জন্য (সন্ধান করুন-ম্যাক্সডেপথ 1-টাইপ ডি); do file_count = $ ($ i -type f | wc -l সন্ধান করুন); প্রতিধ্বনি "$ ফাইল_কাউন্ট: $ i"; সম্পন্ন }; গণনা | বাছাই -n -r
শ্নেমে

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

এর মধ্যে রয়েছে .. / এবং এটি এগিয়ে যাবে বলে মনে হচ্ছে না - এর অর্থ এটি প্রতিক্রিয়াশীল নয়।
ড্যানিয়েল লেফবভ্রে

50

তুমি ব্যবহার করতে পার

$ tree

সাথে ট্রি প্যাকেজ ইনস্টল করার পরে

$ sudo apt-get install tree

(একটি ডেবিয়ান / পুদিনা / উবুন্টু লিনাক্স মেশিনে)।

কমান্ডটি কেবল ফাইলগুলির গণনাই নয়, ডিরেক্টরিগুলির পৃথক পৃথক গণনাও প্রদর্শন করে। সর্বাধিক ডিসপ্লে লেভেল (যা ডিফল্টরূপে ডিরেক্টরি ট্রি-এর সর্বোচ্চ গভীরতা) নির্দিষ্ট করতে বিকল্প -L বিকল্পটি ব্যবহার করা যেতে পারে।

-aঅপশন সরবরাহ করে লুকানো ফাইলগুলিও অন্তর্ভুক্ত করা যেতে পারে ।


4
এটি হ'ল ডিরেক্টরি এবং ফাইল সংখ্যা দেখার সহজতম উপায়।
Lorem Ipsum ডলর

11
ম্যান পৃষ্ঠা থেকে: ডিফল্টরূপে ট্রি লুকানো ফাইল মুদ্রণ করে না-aএগুলি অন্তর্ভুক্ত করার জন্য আপনাকে বিকল্প সরবরাহ করতে হবে।
eee

3
এটি ম্যাকোজে ইনস্টল করতে, ব্যবহার করুন brewএবং চালান brew install tree, চলার পরে পছন্দনীয় brew update
আশীষ আহুজা

4
এটি সমস্ত ফাইলের নামও মুদ্রণ করছে, সুতরাং আপনার কাছে অনেকগুলি ফাইল থাকলে এটি ধীর হবে।
ফ্রাঙ্ক ডারননকোর্ট

2
বাহ, খুব সুন্দর সরঞ্জাম, এটি ফোল্ডারগুলি রঙিনযুক্ত করতে পারে, কেবল ফোল্ডারগুলির তালিকা করতে পারে, জেএসএন হিসাবে আউটপুট। এটি খুব কয়েক সেকেন্ডে 34k ফোল্ডার এবং 51k ফাইল তালিকাভুক্ত করতে পারে। OLE!
ব্রাসোফিলো

46

আমার কম্পিউটারে, গৃহীত উত্তরের rsyncচেয়ে কিছুটা দ্রুত find | wc -l:

$ rsync --stats --dry-run -ax /path/to/dir /tmp

Number of files: 173076
Number of files transferred: 150481
Total file size: 8414946241 bytes
Total transferred file size: 8414932602 bytes

উপরের উদাহরণে দ্বিতীয় লাইনে ফাইলগুলির সংখ্যা রয়েছে 150,481। বোনাস হিসাবে আপনি মোট আকার পাবেন (বাইটে)।

মন্তব্য:

  • প্রথম লাইনটি ফাইল, ডিরেক্টরি, সিমলিংক ইত্যাদির এক সাথে সমস্ত একসাথে গণনা, এ কারণেই এটি দ্বিতীয় লাইনের চেয়ে বড়।
  • --dry-run(অথবা-n সংক্ষেপে) বিকল্প আসলে ফাইল স্থানান্তর না খুবই জরুরী!
  • আমি -x"ফাইল সিস্টেমের সীমানা অতিক্রম করবেন না" বিকল্পটি ব্যবহার করেছি , যার অর্থ যদি আপনি এটির জন্য নির্বাহ করেন /এবং আপনার যদি বাহ্যিক হার্ড ডিস্ক সংযুক্ত থাকে তবে এটি কেবলমাত্র রুট পার্টিশনের ফাইলগুলি গণনা করবে।

আমি আপনার এখানে rsync ব্যবহার করার ধারণাটি পছন্দ করি। আমি কখনই এ নিয়ে ভাবিনি!
কুইল

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

1
এই চেষ্টা। উভয় আগেই fs ক্যাশে জনপ্রিয় করার জন্য দু'বার চালানোর পরে, find ~ -type f | wc -l1.7 / 0.5 / 1.33 সেকেন্ড (রিয়েল / ইউজার / সিএস) নিয়েছিল। rsync --stats --dry-run -ax ~ /xxx4.4 / 3.1 / 2.1 সেকেন্ড সময় নিয়েছে। এটি এসএসডি-তে প্রায় 500,000 ফাইলের জন্য।
পাতলা

Number of files: 487 (reg: 295, dir: 192)
ডুনো আপনি আরএসএনসি-

আমি rsync version 2.6.9 protocol version 29
ম্যাকোজে

20

যেহেতু ইউএনআইএক্স-এ ফাইলের নামগুলিতে নিউলাইন (হ্যাঁ, নিউলাইনস) wc -lথাকতে পারে তাই অনেকগুলি ফাইল গণনা করতে পারে। আমি প্রতিটি ফাইলের জন্য একটি বিন্দু মুদ্রণ করব এবং তারপরে বিন্দুগুলি গণনা করব:

find DIR_NAME -type f -printf "." | wc -c

1
দেখে মনে হচ্ছে এটিই একমাত্র সমাধান যা তাদের নামে নতুন লাইনের সাথে ফাইলগুলি পরিচালনা করে। সম্মত।
কোডফোরেস্টার

2
হাইহি :) আমি ফাইলের নামগুলিতে নিউলাইনগুলি পছন্দ করি। এটি তাদের কেবল আরও পাঠযোগ্য।
hek2mgl

আমি বলতে চাচ্ছি, ফাইলের মধ্যে নতুন লাইন নাম না করুন!
কোডফোরস্টার

1
আমি শুধু ঠাট্টা করছিলাম ... হ্যাঁ, ফাইলের নামগুলিতে সর্বদা নতুন লাইনগুলি আমলে নেওয়া উচিত। তারা দূষিত সামগ্রী বা কম দর্শনীয়, কোনও টাইপ থেকে আসতে পারে।
hek2mgl

18

এখানে বেশ কয়েকটি উত্তর একত্রিত করা, সবচেয়ে কার্যকর সমাধান বলে মনে হচ্ছে:

find . -maxdepth 1 -type d -print0 |
xargs -0 -I {} sh -c 'echo -e $(find "{}" -printf "\n" | wc -l) "{}"' |
sort -n

এটি ফাইলের নামের মতো বিজোড় জিনিসগুলি হ্যান্ডেল করতে পারে যাতে স্পেস প্যারেন্সেসিস এমনকি নতুন লাইনও অন্তর্ভুক্ত থাকে। এটি ফাইলের সংখ্যা দ্বারা আউটপুটও বাছাই করে।

-maxdepthসাব ডিরেক্টরিগুলিও গণনা করার পরে আপনি সংখ্যাটি বাড়িয়ে নিতে পারেন । মনে রাখবেন যে এটি সম্ভবত দীর্ঘ সময় নিতে পারে, বিশেষত যদি আপনার উচ্চ -maxdepthসংখ্যার সাথে একত্রে খুব নীড়যুক্ত ডিরেক্টরি কাঠামো থাকে ।


কি দিয়ে echo -e? আমার ধারণা আপনি কোনও নতুন লাইন ভাঁজ করার জন্য এটি রেখেছিলেন তবে এটি অন্য যে কোনও অনিয়মিত শ্বেতস্পেসকে ছড়িয়ে দেবে এবং ফাইলের নামের সাথে উপস্থিত কোনও ওয়াইল্ডকার্ড অক্ষরকে প্রসারিত করার চেষ্টা করবে। আমি সরলভাবে কিছু যেতে চাই find .* * -type d -execdir sh -c 'find . -type f -printf "\n" | wc -l; pwd'এবং আউটপুটে যে কোনও ক্ষয়ক্ষতি নিয়ে বেঁচে থাকতাম , বা printf "%q"ডিরেক্টরি বা নামটি মুদ্রণের জন্য বাশের সাথে খেলতাম ।
ট্রিপলি

10

আপনি যদি বর্তমান ওয়ার্কিং ডিরেক্টরি থেকে কতগুলি ফাইল এবং উপ-ডিরেক্টরি বিদ্যমান তা জানতে চান আপনি এই ওয়ান-লাইনারটি ব্যবহার করতে পারেন

find . -maxdepth 1 -type d -print0 | xargs -0 -I {} sh -c 'echo -e $(find {} | wc -l) {}' | sort -n

এটি জিএনইউ ফ্লেভারে কাজ করবে, এবং বিএসডি লিনাক্সের (যেমন ওএসএক্স) ইকো কমান্ডটি থেকে বাদ দেবে।


2
দুর্দান্ত সমাধান! আমি খুঁজে পেলাম কেবলমাত্র সমস্যাটি হ'ল ডিরেক্টরিগুলি স্পেস বা বিশেষ অক্ষরগুলির সাথে। দির নামটি কোথায় ব্যবহার করা হয় তা উদ্ধৃতি যুক্ত করুন:find . -maxdepth 1 -type d -print0 | xargs -0 -I {} sh -c 'echo -e $(find "{}" | wc -l) "{}"' | sort -n
জন কেরি

1
আমি এটিকে কিছুটা পরিবর্তন করেছি এবং এটি আমার পক্ষে বেশ ভালভাবে কাজ করে:find . -maxdepth 1 -type d -print0 | xargs -0 -I {} sh -c 'echo $(find {} | wc -l) \\t {}' | sort -rn | less
উইজেক

@ সেবাস্তিয়ানদের উত্তর সম্পর্কে আমার মন্তব্যগুলি এখানেও প্রযোজ্য। ব্যবহারের echo -eএকটি unquoted ডিরেক্টরির নামের উপর (বা শুধু `পূর্ববর্তী মন্তব্যে যেমন echo`) অন্য এক সমস্যা ব্যবসা।
ট্রিপলি

8

আপনি যদি ত্রুটির ঘটনাগুলি এড়াতে চান তবে wc -lনতুন লাইনের সাথে ফাইলগুলি দেখতে দেবেন না (এটি এটি 2+ ফাইল হিসাবে গণ্য হবে)

উদাহরণস্বরূপ একটি ক্ষেত্রে বিবেচনা করুন যেখানে আমাদের একক ইওল অক্ষরযুক্ত একটি ফাইল রয়েছে

> mkdir emptydir && cd emptydir
> touch $'file with EOL(\n) character in it'
> find -type f
./file with EOL(?) character in it
> find -type f | wc -l
2

যেহেতু কমপক্ষে gnu wcএকটি নাল টার্মিনেটেড তালিকা (ফাইল বাদে) পড়ার / গণনা করার কোনও বিকল্প বলে মনে হচ্ছে না, তাই এর সহজ সমাধান হ'ল ফাইলের নামগুলি পাস না করা, তবে প্রতিবার একটি ফাইল পাওয়া গেলে একটি স্থির আউটপুট eg উপরের মত একই ডিরেক্টরিতে

> find -type f -exec printf '\n' \; | wc -l
1

অথবা যদি findএটি সমর্থন করে

> find -type f -printf '\n' | wc -l
1 

7

আপনি কমান্ডটি ব্যবহার করতে পারেন ncdu। এটি লিনাক্স ডিরেক্টরিতে থাকা কতগুলি ফাইল পুনরাবৃত্তভাবে গণনা করবে। এখানে আউটপুট উদাহরণ:

এখানে চিত্র বর্ণনা লিখুন

এটিতে একটি অগ্রগতি বার রয়েছে যা আপনার কাছে অনেকগুলি ফাইল থাকলে সুবিধাজনক:

এখানে চিত্র বর্ণনা লিখুন

উবুন্টুতে এটি ইনস্টল করতে:

sudo apt-get install -y ncdu

বেঞ্চমার্ক: আমি https://archive.org/details/cv_corpus_v1.tar (380390 ফাইল, 11 গিগাবাইট) ফোল্ডার হিসাবে ব্যবহার করেছি যেখানে ফাইলের সংখ্যা গণনা করতে হয়।

  • find . -type f | wc -l: প্রায় 1m20s সম্পূর্ণ করতে
  • ncdu: প্রায় 1m20s সম্পূর্ণ করতে

এটি প্রধানত ডিস্কের ব্যবহার গণনা করে, ফাইলের সংখ্যা নয়। এই অতিরিক্ত ওভারহেড সম্ভবত চাওয়া হয় না। (স্ট্যান্ডার্ড POSIX ইউটিলিটিগুলির সাহায্যে করা যেতে পারে এমন কোনও অতিরিক্ত প্যাকেজ ইনস্টল করার প্রয়োজনীয়তা ছাড়াও)
হেক 2 এমজিএল

@ হেক 2 এমজিএল এটি প্রথম ফাইলের স্ক্রিনশটে লাল হিসাবে দেখানো ফাইলের সংখ্যা গণনা করে। আমার 2 মিলিয়ন ডলার ফাইলের জন্য কয়েক মিনিট সময় লেগেছে, তাই গতি খুব খারাপ নয়।
ফ্রাঙ্ক ডারননকোর্ট

2
@ হেক 2 এমজিএল আমি উত্তরে একটি পুনরুত্পাদনযোগ্য বেঞ্চমার্ক যুক্ত করেছি, আমি এটি দু'বার চালিয়েছি এবং আমি find . -type f | wc -lএবং এর মধ্যে কোনও পার্থক্য দেখিনি ncdu
ফ্রাঙ্ক ডারননকোর্ট

2
হ্যাঁ, দেখে মনে findহচ্ছে একই সিস্টেম কলগুলি কম-বেশি চালাচ্ছে duযার জন্য ব্যাকএন্ড ncdu। শুধু তাদের স্ট্রেস।
hek2mgl

1
পছন্দ করেছেন আমি একটি ফোল্ডারে টন ফাইল রেখেছি এবং একটি অগ্রগতি বার থাকা জীবন রক্ষাকারী। ভাগ করে নেওয়ার জন্য ধন্যবাদ!
গিগ


4

বর্তমান ডিরেক্টরিতে কতগুলি ফাইল রয়েছে তা নির্ধারণ করতে, প্রবেশ করুন ls -1 | wc -l। এটি আউটপুটে wcলাইনের সংখ্যার একটি গণনা করতে ব্যবহার করে । এটি ডটফাইলে গণনা করে না। দয়া করে মনে রাখবেন(-l)ls -1ls -l (এটি পূর্ববর্তী উদাহরণগুলির মতো "1" এর পরিবর্তে "" L ") যা আমি এই হাওটো এর পূর্ববর্তী সংস্করণগুলিতে ব্যবহার করেছিলাম তা প্রকৃত গণনার চেয়ে আপনাকে একটি ফাইল গণনা দেবে। কাম নেজাদকে এই বিষয়টির জন্য ধন্যবাদ।

যদি আপনি কেবল ফাইলগুলি গণনা করতে চান এবং প্রতীকী লিঙ্কগুলি অন্তর্ভুক্ত না করেন (আপনি কী করতে পারেন তার কেবল উদাহরণ), আপনি ব্যবহার করতে পারেন ls -l | grep -v ^l | wc -l(এটি এই মুহুর্তে "এল" নয় "1" নয়, আমরা এখানে একটি "দীর্ঘ" তালিকা চাই) । grep"l" (কোনও লিঙ্ক নির্দেশ করে) দিয়ে শুরু হওয়া যে কোনও লাইনের জন্য পরীক্ষা করে এবং সেই লাইনটি (-v) বাতিল করে দেয়।

আপেক্ষিক গতি: "ls -1 / usr / bin / | wc -l" আনলোড হওয়া 486SX25 (/ usr / bin / এ মেশিনে 355 ফাইল রয়েছে) এ প্রায় 1.03 সেকেন্ড সময় নেয়। " ls -l /usr/bin/ | grep -v ^l | wc -l" প্রায় 1.19 সেকেন্ড সময় নেয়।

সূত্র: http://www.tldp.org/HOWTO/Bash-Prompt-HOWTO/x700.html


2
ls -lstatতার ফাইলের আকার, এমটাইম এবং অন্যান্য বৈশিষ্ট্যগুলি পড়তে অবশ্যই প্রতিটি ফাইলের জন্য সিস্কেল করতে হবে যা ধীর। বড় ডিরেক্টরিতে (100.000+ ফাইল) চলতে ls -lকয়েক মিনিট সময় নিতে পারে। তাই কেবল ফাইল গণনা করতে সর্বদা ব্যবহার করুন ls -1 | wc -l
মার্কি 555

একটি 486SX25, দুর্দান্ত
cam8001

ls -1বড় ডিরেক্টরিগুলিতে এখনও ধীর হতে পারে, কারণ এটি ফাইলগুলি বাছাই করতে হবে। কেবলমাত্র printf '%s\n' *একই জিনিস করে, এবং বহিরাগত এড়াতে lsকল (যা সমস্যাযুক্ত কোন উপায়ে) কিন্তু সবচেয়ে বেশি কার্যকরী soluton কমান্ড যা যে কোন শ্রেণীবিভাজন সঞ্চালন নয়, ব্যবহার করা find। (
গ্লোব

4

আপনার যা প্রয়োজন তা যদি কোনও নির্দিষ্ট ফাইলের পুনরাবৃত্তভাবে গণনা করা হয় তবে আপনি এটি করতে পারেন:

find YOUR_PATH -name '*.html' -type f | wc -l 

-l আউটপুটে কেবল লাইনের সংখ্যা প্রদর্শন করা।


এক্সটেনশানটি ফাইলের অংশ এবং এটি
টিওয়াইপি

4

বাশ সহ:

() দিয়ে প্রবেশের একটি অ্যারে তৈরি করুন এবং # দিয়ে গণনা পান get

FILES=(./*); echo ${#FILES[@]}

ঠিক আছে যে পুনরাবৃত্তভাবে ফাইলগুলি গণনা করে না তবে আমি প্রথমে সহজ বিকল্পটি দেখাতে চেয়েছিলাম। একটি সাধারণ ব্যবহারের ক্ষেত্রে কোনও ফাইলের রোলওভার ব্যাকআপ তৈরি করা যায় for এটি logfile.1, logfile.2, logfile.3 ইত্যাদি তৈরি করবে

CNT=(./logfile*); mv logfile logfile.${#CNT[@]}

বাশ 4+ এর সাথে পুনরাবৃত্তিযোগ্য গণনা globstarসক্ষম হয়েছে (@ ট্রাইপল্লি দ্বারা উল্লিখিত)

FILES=(**/*); echo ${#FILES[@]}

পুনরাবৃত্তভাবে ফাইলগুলির গণনা পেতে আমরা এখনও একইভাবে সন্ধান করতে পারি।

FILES=(`find . -type f`); echo ${#FILES[@]}

আধুনিক শেলগুলি **/*পুনরাবৃত্ত গণনার জন্য সমর্থন করে । এটি findবৃহত ডিরেক্টরিগুলির তুলনায় এখনও কম দক্ষ কারণ শেলকে প্রতিটি ডিরেক্টরিতে ফাইলগুলি বাছাই করতে হয়।
ট্রিপলি

2

নামের ফাঁকা জায়গা সহ ডিরেক্টরিগুলির জন্য ... (উপরের বিভিন্ন উত্তরের উপর ভিত্তি করে) - পুনরাবৃত্তির মধ্যে ফাইলের সংখ্যার সাথে ডিরেক্টরি নাম মুদ্রণ করুন:

find . -mindepth 1 -type d -print0 | while IFS= read -r -d '' i ; do echo -n $i": " ; ls -p "$i" | grep -v / | wc -l ; done

উদাহরণ (পাঠযোগ্যতার জন্য ফর্ম্যাট করা):

pwd
  /mnt/Vancouver/Programming/scripts/claws/corpus

ls -l
  total 8
  drwxr-xr-x 2 victoria victoria 4096 Mar 28 15:02 'Catabolism - Autophagy; Phagosomes; Mitophagy'
  drwxr-xr-x 3 victoria victoria 4096 Mar 29 16:04 'Catabolism - Lysosomes'

ls 'Catabolism - Autophagy; Phagosomes; Mitophagy'/ | wc -l
  138

## 2 dir (one with 28 files; other with 1 file):
ls 'Catabolism - Lysosomes'/ | wc -l
  29

ডিরেক্টরি কাঠামোটি আরও ভালভাবে ব্যবহার করে ভিজ্যুয়ালাইজ করা হয়েছে tree:

tree -L 3 -F .
  .
  ├── Catabolism - Autophagy; Phagosomes; Mitophagy/
  │   ├── 1
  │   ├── 10
  │   ├── [ ... SNIP! (138 files, total) ... ]
  │   ├── 98
  │   └── 99
  └── Catabolism - Lysosomes/
      ├── 1
      ├── 10
      ├── [ ... SNIP! (28 files, total) ... ]
      ├── 8
      ├── 9
      └── aaa/
          └── bbb

  3 directories, 167 files

man find | grep mindep
  -mindepth levels
    Do not apply any tests or actions at levels less than levels
    (a non-negative integer).  -mindepth 1 means process all files
    except the starting-points.

ls -p | grep -v /(নীচে ব্যবহার করা হয়েছে) উত্তর 2 থেকে /unix/48492/list-only-regular-files-but-not-directories-in-current-directory এ দেওয়া হয়েছে

find . -mindepth 1 -type d -print0 | while IFS= read -r -d '' i ; do echo -n $i": " ; ls -p "$i" | grep -v / | wc -l ; done
./Catabolism - Autophagy; Phagosomes; Mitophagy: 138
./Catabolism - Lysosomes: 28
./Catabolism - Lysosomes/aaa: 1

অ্যাপ্লিকেশন: আমি কয়েক শতাধিক ডিরেক্টরি (সমস্ত গভীরতা = 1) এর মধ্যে ফাইলগুলির সর্বাধিক সংখ্যার সন্ধান করতে চাই (নীচে আউটপুটটি পুনরায় পাঠযোগ্যতার জন্য ফর্ম্যাট করা]:

date; pwd
    Fri Mar 29 20:08:08 PDT 2019
    /home/victoria/Mail/2_RESEARCH - NEWS

time find . -mindepth 1 -type d -print0 | while IFS= read -r -d '' i ; do echo -n $i": " ; ls -p "$i" | grep -v / | wc -l ; done > ../../aaa
    0:00.03

[victoria@victoria 2_RESEARCH - NEWS]$ head -n5 ../../aaa
    ./RNA - Exosomes: 26
    ./Cellular Signaling - Receptors: 213
    ./Catabolism - Autophagy; Phagosomes; Mitophagy: 138
    ./Stress - Physiological, Cellular - General: 261
    ./Ancient DNA; Ancient Protein: 34

[victoria@victoria 2_RESEARCH - NEWS]$ sed -r 's/(^.*): ([0-9]{1,8}$)/\2: \1/g' ../../aaa | sort -V | (head; echo ''; tail)

    0: ./Genomics - Gene Drive
    1: ./Causality; Causal Relationships
    1: ./Cloning
    1: ./GenMAPP 2
    1: ./Pathway Interaction Database
    1: ./Wasps
    2: ./Cellular Signaling - Ras-MAPK Pathway
    2: ./Cell Death - Ferroptosis
    2: ./Diet - Apples
    2: ./Environment - Waste Management

    988: ./Genomics - PPM (Personalized & Precision Medicine)
    1113: ./Microbes - Pathogens, Parasites
    1418: ./Health - Female
    1420: ./Immunity, Inflammation - General
    1522: ./Science, Research - Miscellaneous
    1797: ./Genomics
    1910: ./Neuroscience, Neurobiology
    2740: ./Genomics - Functional
    3943: ./Cancer
    4375: ./Health - Disease 

sort -Vএকটি প্রাকৃতিক ধরণের। ... সুতরাং, সেগুলির (ক্লজ মেল) ডিরেক্টরিগুলির মধ্যে আমার ফাইলের সর্বাধিক সংখ্যা 4375 ফাইল। যদি আমি এই ফাইলটির নাম বাম-প্যাড ( https://stackoverflow.com/a/55409116/1904943 ) - প্রতিটি ডিরেক্টরিতে 1 দিয়ে শুরু করে এবং সমস্ত 5 টি সংখ্যায় প্যাড করে, সেগুলির নাম দেওয়া হয়েছে ।


অভিযোজ্য বস্তু

একটি ডিরেক্টরিতে ফাইলের মোট ডিরেক্টরি, উপ-ডিরেক্টরিগুলি সন্ধান করুন।

$ date; pwd
Tue 14 May 2019 04:08:31 PM PDT
/home/victoria/Mail/2_RESEARCH - NEWS

$ ls | head; echo; ls | tail
Acoustics
Ageing
Ageing - Calorie (Dietary) Restriction
Ageing - Senescence
Agriculture, Aquaculture, Fisheries
Ancient DNA; Ancient Protein
Anthropology, Archaeology
Ants
Archaeology
ARO-Relevant Literature, News

Transcriptome - CAGE
Transcriptome - FISSEQ
Transcriptome - RNA-seq
Translational Science, Medicine
Transposons
USACEHR-Relevant Literature
Vaccines
Vision, Eyes, Sight
Wasps
Women in Science, Medicine

$ find . -type f | wc -l
70214    ## files

$ find . -type d | wc -l
417      ## subdirectories

1

আমি লিখেছি ffcnt নির্দিষ্ট পরিস্থিতিতে পুনরাবৃত্ত হওয়া ফাইল গণনা দ্রুত করার জন্য : ঘূর্ণন ডিস্ক এবং ফাইল যা পরিধি ম্যাপিং সমর্থন করে।

এটি দ্রুত lsবা findভিত্তিক পদ্ধতির চেয়ে প্রস্থের ক্রম হতে পারে তবে ওয়াইএমএমভি।


0

এখানে অনেক সঠিক উত্তর আছে। এখানে আর একটি!

find . -type f | sort | uniq -w 10 -c

.ফোল্ডারটি কোথায় সন্ধান করতে হবে এবং 10অক্ষরগুলির সংখ্যার সাহায্যে ডিরেক্টরিটি গোষ্ঠীভুক্ত করা হবে।


-1

ফাইন্ড-টাইপ চ | wc -l

বা (ডিরেক্টরি যদি ডিরেক্টরি বর্তমান থাকে)

অনুসন্ধান . -প্রকার চ | wc -l


এই একই প্রশ্নের নূন্যতম অন্য একটি উত্তর।
কুসালানন্দ

-1

এটি পুরোপুরি সূক্ষ্ম কাজ করবে। সরল সংক্ষিপ্ত। আপনি যদি কোনও ফোল্ডারে উপস্থিত ফাইলের সংখ্যা গণনা করতে চান।

ls | wc -l

3
প্রথমত, এটি প্রশ্নের উত্তর দেয় না। প্রশ্নটি একটি ডিরেক্টরি ফরোয়ার্ড থেকে পুনরাবৃত্তভাবে ফাইলগুলি গণনা করা সম্পর্কে এবং আপনি যে কমান্ড দেখান তা তা করে না। তদ্ব্যতীত, এলএস দিয়ে আপনি ডিরেক্টরি পাশাপাশি ফাইল গণনা করছেন। এছাড়াও, কোনও পুরানো প্রশ্নের উত্তর দেওয়ার কোনও কারণ নেই যদি আপনি নতুন কিছু যুক্ত করতে যাচ্ছেন না এবং এমনকি প্রশ্নটি সঠিকভাবে পড়তে যাচ্ছেন না। দয়া করে এটি করা থেকে বিরত থাকুন।
এক্সএফসিসি

-1

ফর্ম্যাট জন্য ফিল্টারিং সহ এই বিকল্প পদ্ধতির সমস্ত উপলব্ধ গ্রাব কার্নেল মডিউল গণনা করা হয়:

ls -l /boot/grub/*.mod | wc -l

-3
ls -l | grep -e -x -e -dr | wc -l 
  1. লম্বা তালিকা
  2. ফিল্টার ফাইল এবং ডায়ার
  3. ফিল্টার করা লাইন নং
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.