නාමාවලියක ඇති සියලුම ලිපිගොනු පුනරාවර්තනය කරන්න [අනුපිටපත]


222

විය හැකි අනුපිටපත:
ලිනක්ස් භාවිතා කර ධාවකයක ඇති ෆෝල්ඩර ගණන ගණනය කරන්නේ කෙසේද?

මගේ ලිනක්ස් පෙට්ටියේ ඇත්තටම ගැඹුරු ඩිරෙක්ටරි ගසක් තිබේ. සියලුම උප බහලුම් ඇතුළුව එම මාර්ගයේ ඇති සියලුම ගොනු ගණන් කිරීමට මම කැමතියි.

උදාහරණයක් ලෙස, මෙම නාමාවලි ගස ලබා දී ඇත:

/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. නමුත්: මෙයද ලිපිගොනු /this/other/path/with/some/pathගණනය කරනු ඇති අතර ෆෝල්ඩර ගණනය කරනු ඇත.
අර්ජන්

මාර්ගය වන විට, මෙය වෙනස්, නමුත් සමීපව සම්බන්ධ ගැටළුවක් (ධාවකයක ඇති සියලුම නාමාවලි ගණන් කිරීම) සහ විසඳුම: superuser.com/questions/129088/…
අමන්ඩා

Answers:


371

find . -type f | wc -l

පැහැදිලි කිරීම: මෙම ( . ) නාමාවලියෙහි
find . -type fඇති සියලුම ලිපිගොනු ( -type f ) සොයා ගන්නා අතර සියලුම උප නාමාවලිවල ගොනු නාමයන් මුද්‍රණය කරනු ලබන්නේ එක් පේළියකට එකක් සම්මත ලෙස ය.

මෙය පසුව නල | බවට wc(වදන් සංඛ්යාව) එම -lවිකල්පය එහි ආදාන පේළි ගණන ගණන් කෘත්යාධිකාරී කියයි.

ඔවුන් එක්ව ඔබගේ සියලුම ගොනු ගණන් කරයි.


1
findනිමැවුමේ අවසාන නව
රේඛාව

නාමාවලි ගණන් කිරීම සඳහා පමණක්, '-type f' වෙනුවට '-type d' භාවිතා කරන්න: D
MevlütÖzdemir

1
ලිපිගොනු නොමැති විට, 1
ප්‍රති result ලය

49

ඉහත පිළිතුරු දැනටමත් ප්‍රශ්නයට පිළිතුරු සපයයි, නමුත් ඔබ තර්කයකින් තොරව සොයා ගැනීම භාවිතා කරන්නේ නම් (ඔබට සෙවීම සිදුවීමට අවශ්‍ය ෆෝල්ඩරය හැර):

find . | wc -l

සෙවීම වඩා වේගවත්, ක්ෂණිකවම හෝ අවම වශයෙන් එය මා වෙනුවෙන් කරයි. මෙයට හේතුව, එහි වගන්තිය පරීක්ෂා කිරීම සඳහා එක් එක් නම සඳහා සංඛ්‍යා () පද්ධති ඇමතුමක් ක්‍රියාත්මක කළ යුතු බැවිනි - එය මඟ හැරීම එසේ කිරීමෙන් වළක්වයි.

ලිපිගොනු වෙනුවට ගොනු ගණන සහ ෆෝල්ඩර නැවත ලබා දීමේ වෙනස මෙයට ඇත, නමුත් අවම වශයෙන් මට මෙය ප්‍රමාණවත් බැවින් ඒවා පිටපත් කිරීමට හා සම්පීඩනය කිරීමට සදාකාලිකවම ගත හැකි විශාල ගොනු විශාල ප්‍රමාණයක් ඇති ෆෝල්ඩර සොයා ගැනීමට මම මෙය භාවිතා කරමි. ෆෝල්ඩර ගණන් කිරීම තවමත් බොහෝ ලිපිගොනු සහිත ෆෝල්ඩර සොයා ගැනීමට මට ඉඩ දෙයි, නිරවද්‍යතාවයට වඩා වැඩි වේගයක් මට අවශ්‍යය.


1
ලිපිගොනු නොමැති විට, 1
ප්‍රති result ලය

26

ගොනු සඳහා:

find -type f | wc -l

නාමාවලි සඳහා:

find -mindepth 1 -type d | wc -l

ඔවුන් දෙදෙනාම වත්මන් වැඩ කරන නාමාවලියෙහි වැඩ කරති.


1
ලිපිගොනු නොමැති විට, 1
ප්‍රති result ලය

8

Bash 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
මත මැක් / BSD : find $DIR -exec stat -f '%HT' {} \; | sort | uniq -c | sort -rn(මෙන්න, වර්ගය %Tහිස් සාමාන්ය ගොනුව සඳහා, ක ක්රියාත්මක ගොනුව සඳහා තරු ලකුණ යොදා, හෝ ෆෝල්ඩරය සඳහා සිඳ ය; ඒ නිසා %HTඅවශ්ය, හෝ වැඩිපුර පෙළ මෙන් ගණන් නො සිට අවකාශය වළක්වා ගැනීමට > %T. )
අර්ජන්

මගේ 10.13.6 මැක්
කේ-මයිකල්
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.