ප්‍රමාණයෙන් ඇණවුම් කරන ලද සියලුම ගොනු ලැයිස්තුගත කරන්නේ කෙසේද


271

සියලුම ලිපිගොනු විශාල සිට කුඩා දක්වා අනුපිළිවෙලින් ලැයිස්තුගත කිරීමට මා කැමති අතර ලිපිගොනු කිසියම් ෆෝල්ඩරයක ඕනෑම තැනක තිබිය හැකිය.



7
සිට man ls:-S sort by file size
ctrl-alt-delor

ඔබ අදහස් කරන්නේ “ගොනු මෙම නාමාවලියෙහි ඇති” හෝ “ගොනු ඕනෑම උප නාමාවලියක තිබිය හැක” යන්නයි.
ctrl-alt-delor

ඔබට GUI මෙවලමක් භාවිතා කිරීමට හැකි නම් / අවශ්‍ය නම් , කලින් KDirStat හි QDirStat දෙස බලන්න .
රයිනෝ ඩෙවල්

Answers:


320

සරලව වැනි දෙයක් භාවිතා කරන්න:

ls -lS /path/to/folder/

ප්රාග්ධනය එස් .

මෙය ගොනු ප්‍රමාණය අනුව වර්ග කරයි.

මෙයද බලන්න:

man ls

-S     sort by file size

ඔබට ප්‍රතිලෝම අනුපිළිවෙලට වර්ග කිරීමට අවශ්‍ය නම් , -rස්විචය එක් කරන්න .

යාවත්කාලීන කිරීම:

නාමාවලි බැහැර කිරීම සඳහා (සහ ගොනු නාම හෝ සිම්ලින්ක් ඉලක්ක කිසිවක් නව රේඛා අක්ෂර අඩංගු නොවේ නම්):

ls -lS | grep -v '^d' 

යාවත්කාලීන 2:

ෆෝල්ඩර විය හැකි සංකේතාත්මක සබැඳි තවමත් එය පෙන්වන ආකාරය මම දැන් දකිමි. සංකේතාත්මක සබැඳි සෑම විටම සබැඳියේ මෙන් l අකුරකින් ආරම්භ වේ.

A සඳහා පෙරීමට විධානය වෙනස් කරන්න -. මෙය සාමාන්‍ය ලිපිගොනු පමණක් ඉතිරි කළ යුතුය:

ls -lS | grep '^-'

මගේ පද්ධතියේ මෙය සාමාන්‍ය ගොනු පමණක් පෙන්වයි.

යාවත්කාලීන 3:

පුනරාවර්තනය එකතු කිරීම සඳහා, මම sortවිධානයට රේඛා වර්ග කිරීම අතහැර දමා 5 වන තීරුව භාවිතා කර එය වර්ග කිරීමට කියමි.

ls -lR | grep '^-' | sort -k 5 -rn

-rnඉහළම විශාලතම ලිපිගොනු ලබා ගැනීම සඳහා ප්‍රතිලෝම සහ සංඛ්‍යාත්මක වේ. මෙම විධානයේ පහළ පැත්ත නම් එය ලිපිගොනු වල සම්පූර්ණ මාර්ගය නොපෙන්වයි.

ඔබට ලිපිගොනු වල සම්පූර්ණ මාර්ගය අවශ්‍ය නම්, මේ වගේ දෙයක් භාවිතා කරන්න:

find . -type f  -exec du -h {} + | sort -r -h

මෙම findවිධානය ඇත්තෙන් වෙනසට භාජනය සියලු උප බහලුම් තුල සියළුම ගොනු සොයා ගන්නේ .හා ඇමතුම් du -h(තේරුම -humanreadable තැටි භාවිතය නැවත) හා එවකට ආකාරයක ප්රතිදානය. ඔබගේ find/ sortසහාය නොදක්වන්නේ නම් -h, du -kසහ ආදේශ කරන්න sort -rn. ප්‍රමාණය සහ තැටි භාවිතය එකම දෙයක් නොවන බව සලකන්න .


5
duගොනු ප්‍රමාණයට වඩා වෙනස් තැටි භාවිතය ලබා දෙයි. (GNU) සමඟ du -h, සංඛ්‍යාත්මක වර්ග කිරීම ක්‍රියා නොකරනු ඇත (ඔබට -hවර්ග කිරීමට GNU විකල්පය අවශ්‍ය වේ). xargs අපේක්ෂා කළ හැකි වචන ලැයිස්තුවක් ආදානය ලෙස අපේක්ෂා කරයි, එබැවින් ගොනු නාමවල හිස් හෝ උපුටා ගත් අක්ෂර තිබේ නම් එය ක්‍රියා නොකරනු ඇත.
ස්ටෙෆාන් චසෙලාස්

1
-S අවරෝහණ ප්‍රමාණයේ අනුපිළිවෙලක් ඇති බව මට පෙනේ, නැගීමේ අනුපිළිවෙල ගැන කුමක් කිව හැකිද?
ඩිමොන්ගෝලම්

3
@ ස්ටෙෆාන් චැසෙලාස් අනුගමනය කිරීමෙන්, මෙය මට ප්‍රයෝජනවත් වේ : find . -type f -print0 | xargs -0 du -h | sort -rh. ඔබට අවශ්‍ය නම් විශාලතම ගොනු 30 කියන්න : find . -type f -print0 | xargs -0 du -h | sort -rh | head -n 30.
user7543

1
හායි! කරුණාකර ඔබට + |වාක්‍ය ඛණ්ඩය පැහැදිලි කළ + | sort -r -hහැකිද?
වික්ටර්

Ict වික්ටර්, කරුණාකර unix.stackexchange.com/questions/195939/… බලන්න .
හියු වුල්ෆ්

26

ඔබට සොයා ගැනීම සහ වර්ග කිරීම වැනි දෙයක් භාවිතා කළ හැකිය.

find . -type f -ls | sort -r -n -k7

(මෙම -lsසම්මත නොවන නමුත් බොහෝ සොයා සඳහා, GNU එක් පමණක් නොව හමු වී ඇත. දී GNU සොයා සහ වෙනත් අය, ඒ සඳහා ඒ හා සමාන දෙයක් ප්රදර්ශනය විකල්පය ls -liකිහිපයක් හැරුණු සමග, උදාහරණයක් වශයෙන්, ACLs සමග ගොනු + සමඟ සලකුණු නොමැත)

ගොනුවේ නම් වල නව රේඛා අක්ෂර අඩංගු විය හැකි නම්, GNU සොයා ගැනීම සහ GNU වර්ග කිරීම සමඟ:

find . -type f -ls -printf '\0' | sort -zk7rn | tr -d '\0'

මෙය "සමූහ" තීරුව (-ls සිට) කිසිදු අවකාශයක් අඩංගු නොවන බව උපකල්පනය කරයි (එබැවින් -k 7 පරාමිතිය), නමුත් එය එසේ නොවේ.
kolistivra

1
ඇයි හුදෙක් සොයා නොගන්නේ ... -print0 | වර්ග කිරීම -zk7rn0?
ඇන්ඩ්‍රේ ද මිරැන්ඩා

ස්තූතියි, මගේ මැක් අවකාශය ඉවර වන විට මකා දැමිය යුතු විශාල සැඟවුණු ලිපිගොනු කිහිපයක් සොයන විට මෙය බොහෝ සෙයින් උපකාරී විය :)
සෑම් චැට්ස්

11

Zsh සහ GNU ls සමඟ:

ls -ldU -- **/*(.OL)

කොහෙද (.OL)යනු glob සුදුසුකම් , .තෝරා ගැනීමට නිත්ය පමණක් ගොනු OL(ගොනු විශාලත්වය, දිග විසින් නියෝගයක් ආපසු හැරවීම සඳහා o , සඳහා අවතීර්ණය සඳහා Oඅවරෝහණ සඳහා).

(zsh හි පැරණි අනුවාද වල ගොනු ප්‍රමාණයන් 2 ^ 32 ට වඩා වැඩි බව සලකන්න).

සමහර මෙහෙයුම් පද්ධති වලට විධානයකට ලබා දෙන තර්ක ලැයිස්තුවේ ප්‍රමාණයට සීමාවක් ඇත. එවැනි අවස්ථාවලදී ඔබට අවශ්‍ය වන්නේ:

autoload -U zargs
zargs ./**/*(.OL) -- ls -ldU

ඔබට අවශ්‍ය වන්නේ ගොනු ලැයිස්තුවක් මිස සවිස්තරාත්මක ප්‍රතිදානය නොවේ නම්, එසේ කරන්න:

print -rl -- **/*(.OL)

ඔබ (ආරම්භ වන නමක් ඇති තිතක්, සැඟවුණ ගොනු අඩංගු කිරීමට අවශ්ය නම් .හා ..) සහ මෙන්ම සඟවා බහලුම් සඳහා ගවේෂණය කිරීම, එකතු කරන්න Dglobbing සුදුසුකම්:

print -rl -- **/*(.DOL)

මොකද කරන්නේ .OL? එය විධානයේ කොටසක්ද?
alpha_989

@ alpha_989, සංස්කරණය බලන්න
ස්ටෙෆාන් චසෙලාස්

පැහැදිලි කිරීමට ස්තූතියි, ස්ටෙෆාන් .. කෙසේ වෙතත්, කිසියම් හේතුවක් නිසා .. විධානය මගේ වැඩපොළේ ක්‍රියා නොකරයි .. මම භාවිතා කරන්නේ ls (GNU coreutils) 8.25සහ zsh 5.1.1 (x86_64-ubuntu-linux-gnu). එය ඇතැම් අනුවාද සඳහා පමණක් වැඩ කරන්නේ lsසහ zsh?
alpha_989

@ alpha_989, එය ඔබට ප්‍රයෝජනවත් නොවන්නේ කුමන ආකාරයෙන්ද? එම අනුවාදයන් සමඟම එය මට වැඩ කරන අතර අවම වශයෙන් අවුරුදු 15 කට පෙර සිට එම කේතයේ කිසිවක් නොතිබුණි.
ස්ටෙෆාන් චසෙලාස්

9

ප්‍රමාණයෙන් ඉහළට ගොනු ලැයිස්තුගත කිරීම වනුයේ:

ls -lSr

විකල්ප:

  • l: දිගු, සවිස්තරාත්මක පරිශීලකයා, කණ්ඩායම, වෙනත් ගුණාංග, දිනය යනාදිය පෙන්වයි.
  • එස්: ප්‍රමාණය අනුව ඇණවුම් ලැයිස්තුගත කිරීම (පෙරනිමියෙන් බැසයාම)
  • r: ලැයිස්තුගත කිරීමේ අනුපිළිවෙල ආපසු හරවයි

පිළිතුරේ ගුණාත්මකභාවය වැඩි දියුණු කිරීම සඳහා ඇති විකල්පයන් පැහැදිලි කිරීමට ඔබ කැමතිද?
රූයි එෆ් රිබීරෝ

7

“ලිපිගොනු කිසියම් ෆෝල්ඩරයක ඕනෑම තැනක තිබිය හැකිය” යනුවෙන් පැවසීමෙන් ඇඟවෙන්නේ ආරම්භක නාමාවලිය (ෆෝල්ඩරය) තුළ ඇති සියලුම නාමාවලි (ෆෝල්ඩර) පුනරාවර්තනය වීමට ඔබට අවශ්‍ය බවයි. මෙය කිරීමට findඅදහස් කරන්නේ මෙයයි:

find . -type f -exec ls -lSd {} +

මෙය වත්මන් වැඩ කරන ඩිරෙක්ටරියේ ( ) සියලුම ගොනු "සොයා ගනී" .. සොයාගත් සෑම ගොනුවක් සඳහාම, සොයාගත් lsවස්තූන් ප්‍රමාණ අනුපිළිවෙලට වර්ග කිරීම සඳහා ක්‍රියාවලියක් ක්‍රියාත්මක වේ. මෙම +කිරීමට ටර්මිනේටර් -execබහු තර්ක කිරීමට ලැයිස්තුවක් ලෙස සම්මත කර ගැනීමට නියමිත හේතු ls. ඔබේ ඩිරෙක්ටරියේ (ෆෝල්ඩරයේ) ඉතා විශාල ලිපිගොනු සංඛ්‍යාවක් අඩංගු නොවේ නම්, ඔබට එක් ලැයිස්තුවක් තිබිය යුතුය (මේ අනුව එක් ක්‍රියාවලියක් ෆෝක් කර ඇත), එය ඔබ කැමති ප්‍රති result ලයට මග පාදයි.


1
ලස්සන ගොනු ප්‍රමාණ පෙන්වීමට ls හි -h විකරණකාරකය භාවිතා කිරීමට ඔබට ඉඩ සලසන බැවින් මෙය කදිමයි
shmish111

4

මේවා උත්සාහ කරන්න, එය මට හොඳින් ක්‍රියාත්මක වේ.

$ find /home/san -type f -printf '%s %p\n'| sort -nr | head -n 10

# find /root -type f -exec ls -lS {} + | head -n 10 | awk '{ print $5, $9 }'

පරිපූර්ණ පිළිතුරක් නොව යම් දුරකට ක්‍රියා කරයි

$ ls -lS |grep  '^-' | head -n 6 

1
ගොනු නාමවල කිසිදු ඉඩක් නොමැති නම් awk හොඳින් ක්‍රියා කරයි.
Eir Nym

ඔව් .. 'sed' භාවිතා කර අවකාශය අවතක්සේරු කරන්න? එය උදව් කරන්නේ නම්
සෑන්ඩ් 1512

නැත, මම sedප්‍රතිදානය කපා හැරීමට භාවිතා කරමි
Eir Nym

4

ගොනු ලැයිස්තු දර්ශනය ප්‍රතිලෝම අනුපිළිවෙලින්: ls -lSrh

නඟින අනුපිළිවෙල සඳහා: ls -lSh


1
මානව හිතකාමී නිමැවුම් සඳහා -h ධජය භාවිතා කිරීම සඳහා +1.
Computingfreak

2

ටික කලකට පෙර මම මේ තරමට යමක් ලිව්වෙමි. ඔබට කොපමණ ගොනු ලැයිස්තුගත කළ යුතුද යන්න සඳහන් කිරීමට තර්කයක් ඉදිරිපත් කළ හැකිය, නැතහොත් ටයිප් කරන්න big, කුමන අවස්ථාවකදී ඔබට 10 ක් ලැබේද යන්න.

big () { 
    NUM_FILES=10;
    if [ $1 ]; then
        NUM_FILES=$1;
    fi;
    du | sort -nr | head -n $NUM_FILES
}

1

ඩෙල්ගේ පිළිතුරට සහ ස්ටෙෆාන් චසෙලාස්ගේ ප්‍රකාශයට එකතු කිරීම ...

find -print0සමඟ ඒකාබද්ධව xargs -0හිස් / අවකාශ / වොට්නොට් සඳහා සහය එක් කරයි.

du -h | sort -rn විවිධ බයිට් ගුණකයන් අතර නිසි ලෙස වර්ග නොකෙරේ, උදා: 1.1M 128K ට පසුව පෙන්වනු ඇත, එය වැරදිය.

sort -rh (--human-numeric-sort) ඒ ගැන සැලකිලිමත් වන නමුත් එය ක්‍රියාත්මක වන්නේ GNU හි අනුවාදය මත පමණි.

පහත දැක්වෙන විධානයන් අපේක්ෂිත ප්‍රතිදානය ලබා දෙනු ඇත.

මිනිස් කියවිය හැකි, ග්නූ වර්ග කිරීම / ලිනක්ස් මත:

find . -type f -print0 | xargs -0 du -h | sort -rh

කිලෝබයිට් ඒකක වල, BSD / OSX / වෙනත් අය මත:

find . -type f -print0 | xargs -0 du -k | sort -rn

BSD / OSX සඳහා, https://unix.stackexchange.com/a/188375/82895 ද බලන්න .


1

මුල් ප්‍රශ්නයේ විචල්‍යතාවයක් ලෙස, ඔබට උප බහලුම්වල ගොනුවල සමුච්චිත ප්‍රමාණය දැකීමට අවශ්‍ය නම්:

#!/bin/bash
find ${1:-.} -maxdepth 1 -type d -exec du -sm {} \; | sort -nr

ප්‍රමාණයන් මෙගාබයිට් වල පෙන්වනු ඇත ( min du -sm). විසින් පිළිගත් වෙනත් වටිනාකම් duවේ -k, කිලෝ බයිට් අඩු කිරීම සඳහා -gඅවරෝහණ සඳහා. -hමිනිසුන්ට කියවිය හැකි සංදර්ශකය සඳහා භාවිතා කිරීම කළ නොහැක්කේ එය වර්ග කිරීම බිඳ දමනු ඇති බැවිනි.

මෙගාබයිට් සඳහා sedඑකතු කිරීම Mසඳහා භාවිතා කරන අනුවාදයක් මෙන්න :

find ${1:-.} -maxdepth 1  -type d  -exec du -sm {} \; | sort -nr | sed -E 's/^([0-9]+)/\1M/g'

පෙන්විය යුතු නාමාවලිය සකසා ${1:-.}ඇති අතර එමඟින් පළමු විධාන රේඛා තර්කය ලබා දී තිබේ නම් හෝ තර්ක නොමැතිව කැඳවනු ලැබුවහොත් වත්මන් නාමාවලිය භාවිතා කරන්න.

සටහන: මෙය ලිපිගොනු විශාල ප්‍රමාණයක් සමඟ දිගු කාලයක් ගතවනු ඇත. විකල්පය -type dමඟින් උප බහලුම් පමණක් ලැයිස්තුගත කර වත්මන් ෆෝල්ඩරයේ ගොනු බැහැර කරනු ඇත; වත්මන් ෆෝල්ඩරයේ ඇති ගොනු බැලීමට ඔබට අවශ්‍ය නම් එය ඉවත් කරන්න.

සටහන: ncduබොහෝ ලිනක්ස් ගබඩාවල (උබුන්ටු / ඩෙබියන් මත apt install ncdu) මෙන්ම ඔක්ස් ( brew install ncdu) මතද භාවිතා කිරීමට ඔබට අවශ්‍ය විය හැකිය .

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.