প্রতিটি ফাইল এবং ডিরেক্টরিগুলির আকার কীভাবে তালিকাভুক্ত করবেন এবং বাশের আকারে উত্থিত আকার অনুসারে বাছাই করবেন?


108

আমি খুঁজে পেয়েছি যে বাশের কোনও ডিরেক্টরি আকারের পক্ষে সহজতর উপায় নেই?

আমি চাই যে আমি যখন টাইপ করব ls -<some options>, এটি ডিরেক্টরি ফাইলের আকারের সমস্ত যোগফলগুলি পুনরাবৃত্তভাবে এবং একই সাথে ফাইলগুলির আকারের তালিকা এবং আকার অনুসারে বাছাই করতে পারে।

এটা কি সম্ভব?


2
কোনও ডিরেক্টরিটির "আকার" বলতে কী বোঝায়? এটির অধীনে ফাইলগুলির সংখ্যা (পুনরাবৃত্ত বা না)? এর অধীনে থাকা ফাইলগুলির আকারের যোগফল (পুনরাবৃত্ত বা না)? ডিরেক্টরিটি নিজেই ডিস্কের আকার? (একটি ডিরেক্টরি ফাইলের নাম এবং অন্যান্য তথ্য সম্বলিত একটি বিশেষ ফাইল হিসাবে প্রয়োগ করা হয়))
কিথ থম্পসন

এটির অধীনে ফাইলগুলির আকারগুলির পুনরাবৃত্তির যোগফল হওয়া উচিত
কিট হো

1
@ কিট: তারপরেই duউত্তর।
কিথ থম্পসন

@ কিথথম্পসন @ কিটহো duকমান্ড ফাইল স্থানের ব্যবহারের অনুমান করে যাতে আপনি যদি সঠিক আকার পেতে চান তবে আপনি এটি ব্যবহার করতে পারবেন না।
ztank1013

@ ztank1013: "সঠিক আকার" দ্বারা আপনি কী বোঝাতে চেয়েছেন তার উপর নির্ভর করে du(কমপক্ষে জিএনইউ কোর্টিলস সংস্করণ) সম্ভবত তথ্য সরবরাহ করার বিকল্প রয়েছে।
কিথ থম্পসন

উত্তর:


218

কেবল ডিরেক্টরিতে নেভিগেট করুন এবং নিম্নলিখিত কমান্ডটি চালান:

du -a --max-depth=1 | sort -n

বা মানব পাঠযোগ্য আকারের জন্য -h যোগ করুন এবং -r প্রথমে বড় ডিরেক্টরি / ফাইল মুদ্রণ করতে পারেন।

du -a -h --max-depth=1 | sort -hr

23
du -hsort -hখুব প্রয়োজন , তা নিশ্চিত করতে, 981Mআগে বলুন 1.3G; সঙ্গে sort -nশুধুমাত্র সংখ্যা বিবেচনায় নেয়া হবে এবং তারা ভুল পথে বৃত্তাকার হবেন।
স্মাইলার্স

এটি বর্তমান ডিরেক্টরিতে স্বতন্ত্র ফাইলগুলির আকার তালিকাভুক্ত করে না, কেবল তার উপ-ডিরেক্টরিগুলির আকার এবং বর্তমান ডিরেক্টরিটির মোট আকার। আউটপুটে পৃথক ফাইলগুলি কীভাবে অন্তর্ভুক্ত করবেন (ওপির প্রশ্নের উত্তর দেওয়ার জন্য)?
এরিক ট্রুটম্যান

@ এরিক ট্রাউটম্যান ফাইলগুলি তালিকা তৈরি করতে আপনার নিজের পছন্দ মতো পরিবর্তে যুক্ত -aএবং ব্যবহার করতে --allহবে--max-depth=1du -a -h --all | sort -h
ফ্রাঙ্কো

অসাধারণ! আমি কয়েক বছর ধরে ল্যামার কিছু করছি। :)
কলবি ব্লেয়ার

6
sort -hশুধুমাত্র
জিএনইউর

20

দৃশ্যত --max-depthঅপশনটি ম্যাক ওএস এক্সের duকমান্ডের সংস্করণে নেই । পরিবর্তে আপনি নিম্নলিখিতটি ব্যবহার করতে পারেন।

du -h -d 1 | sort -n


স্পষ্টতই, তবে আশ্চর্যরকম নয়।
জোশ হাবদাস

20
du -s -- * | sort -n

(এটি লুকানো (.ডটফাইল) ফাইলগুলি প্রদর্শন করবে না)

du -smএমবি ইউনিট ইত্যাদির জন্য ব্যবহার করুন আমি সর্বদা ব্যবহার করি

du -smc -- * | sort -n

কারণ মোট লাইন ( -c) স্পষ্ট কারণে নীচে শেষ হবে :)

পুনশ্চ:

  • ডটফাইলগুলি পরিচালনা করার জন্য মন্তব্যগুলি দেখুন
  • আমি প্রায়শই যেমন 'du -smc / home / / | ব্যবহার করি বড় বিটগুলি ঠিক কোথায় বসে আছে তা অনুভব করার জন্য সাজান - এন | লেজ '

5
du --max-depth=1|sort -nবা find . -mindepth 1 -maxdepth 1|xargs du -s|sort -nডটফাইলস অন্তর্ভুক্ত করার জন্য।
আর্নাড লে ব্ল্যাঙ্ক

@arnoud: আমি যে খুব ব্যবহার করেন, কিন্তু এটা এই প্রশ্নের জন্য ডান উপরন্তু (/ উত্তর) :) মনে হয়নি
sehe

@ arnaud576875 find . -mindepth 1 -maxdepth 1 -print0 | xargs -0 du -s | sort -nযদি পাওয়া যায় এমন কয়েকটি পথের শূন্যস্থান থাকতে পারে।
ল্রি

1
বৃহত্তম মানুষের পাঠযোগ্য দর্শন পেতে এটি একটি দুর্দান্ত বৈকল্পিক:sudo du -smch * | sort -h | tail
মার্সবার্ড

16

হুকুম

du -h --max-depth=0 * | sort -hr

আউটপুট

3,5M    asdf.6000.gz
3,4M    asdf.4000.gz
3,2M    asdf.2000.gz
2,5M    xyz.PT.gz
136K    xyz.6000.gz
116K    xyz.6000p.gz
88K test.4000.gz
76K test.4000p.gz
44K test.2000.gz
8,0K    desc.common.tcl
8,0K    wer.2000p.gz
8,0K    wer.2000.gz
4,0K    ttree.3

ব্যাখ্যা

  • du "ডিস্ক ব্যবহার" প্রদর্শন করে
  • h "মানব পাঠযোগ্য" জন্য (উভয়ই সাজানো এবং দু'ভাবে)
  • max-depth=0মানে duসাবফোল্ডারগুলির আকারগুলি প্রদর্শন করবে না (যদি আপনি প্রতিটি সাব-, সাবসুব-, ..., ফোল্ডারে প্রতিটি ফাইলের আকারগুলি প্রদর্শন করতে চান তবে সরিয়ে দিন)
  • r "বিপরীত" জন্য (বৃহত্তম ফাইল আগে)

ncdu

আমি যখন এই প্রশ্নটিতে এসেছি তখন আমি আমার ফাইল সিস্টেমটি পরিষ্কার করতে চেয়েছিলাম। কমান্ড লাইন সরঞ্জামটি ncduএই কাজের পক্ষে আরও উপযুক্ত।

উবুন্টুতে ইনস্টলেশন:

$ sudo apt-get install ncdu

ব্যবহার:

ncdu [path]কমান্ড লাইনে শুধু টাইপ করুন । পথটি বিশ্লেষণ করার জন্য কয়েক সেকেন্ড পরে, আপনি এরকম কিছু দেখতে পাবেন:

$ ncdu 1.11 ~ Use the arrow keys to navigate, press ? for help
--- / ---------------------------------------------------------
.  96,1 GiB [##########] /home
.  17,7 GiB [#         ] /usr
.   4,5 GiB [          ] /var
    1,1 GiB [          ] /lib
  732,1 MiB [          ] /opt
. 275,6 MiB [          ] /boot
  198,0 MiB [          ] /storage
. 153,5 MiB [          ] /run
.  16,6 MiB [          ] /etc
   13,5 MiB [          ] /bin
   11,3 MiB [          ] /sbin
.   8,8 MiB [          ] /tmp
.   2,2 MiB [          ] /dev
!  16,0 KiB [          ] /lost+found
    8,0 KiB [          ] /media
    8,0 KiB [          ] /snap
    4,0 KiB [          ] /lib64
e   4,0 KiB [          ] /srv
!   4,0 KiB [          ] /root
e   4,0 KiB [          ] /mnt
e   4,0 KiB [          ] /cdrom
.   0,0   B [          ] /proc
.   0,0   B [          ] /sys
@   0,0   B [          ]  initrd.img.old
@   0,0   B [          ]  initrd.img
@   0,0   B [          ]  vmlinuz.old
@   0,0   B [          ]  vmlinuz

বর্তমানে হাইলাইট করা উপাদানটি মুছে দিন d, CTRL+ দিয়ে প্রস্থান করুনc


আপনি দু-হেস * | লিখতেও পারেন বাছাই-ঘন্টা -s (সংক্ষেপে) - ম্যাক্স-গভীরতা = 0
রাসমাসেক্স

5

ls -Sআকার অনুসারে বাছাই। তারপরে, আকারটিও দেখানোর জন্য , আকার ( ) প্রদর্শন অনুসারে বাছাই করা ls -lSএকটি দীর্ঘ ( -l) দেয় -S। আমি সাধারণত যোগ -h, খুব, কিছু সহজ পড়া, তাই করতে ls -lhS


1
আহ, দুঃখিত, এটি আপনার পোস্ট থেকে পরিষ্কার ছিল না। আপনি চান du, মনে হয় কেউ এটি পোস্ট করেছে। @sehe: আপনার বাস্তবের সংজ্ঞা উপর নির্ভর করে - এটি ডিরেক্টরি সংরক্ষণ করার জন্য যে পরিমাণ স্থান ব্যবহার করছে তা দেখাচ্ছে। (এটি কেবল সাবেন্ট্রির আকারেও যুক্ত হচ্ছে না)) এটি কোনও এলোমেলো সংখ্যা নয় এবং এটি সর্বদা 4KiB নয়।
থানাটোস


0

আমি মনে করি আপনি কী করতে চান তা আমি বুঝতে পেরেছি। এটি ফাইলের আকার এবং ডিরেক্টরিগুলির সামগ্রীর আকার অনুসারে বাছাই করা সমস্ত ফাইল এবং সমস্ত ডিরেক্টরিগুলির একটি বাছাই তালিকা দেবে।

(find . -depth 1 -type f -exec ls -s {} \;; find . -depth 1 -type d -exec du -s {} \;) | sort -n

কিছু নয়, সেহে অনেক সহজ সমাধান উপস্থাপন করেছেন। আমি প্রতিদিন নতুন কিছু শিখি!
ডিভোরাক

আমি মনে করি না যে এটি ব্যবহার duকরা কোনও বিকল্প, এটি আপনাকে কেবল একটি আনুমানিক ফলাফল দেবে।
ztank1013

0

[বর্ধিত সংস্করণ]
এটি নীচের প্রাথমিক সংস্করণের তুলনায় অনেক দ্রুত এবং সুনির্দিষ্ট হতে চলেছে এবং বর্তমান ডিরেক্টরিতে সমস্ত ফাইল আকারের যোগফল আউটপুট করবে:

echo `find . -type f -exec stat -c %s {} \; | tr '\n' '+' | sed 's/+$//g'` | bc

stat -c %sএকটি ফাইল-এ কমান্ড বাইটে তার আকার ফিরে আসবে। trকমান্ড এখানে পরাস্ত করতে ব্যবহৃত হয় xargsকমান্ড সীমাবদ্ধতা (দৃশ্যত করার বংশীধ্বনিতুল্য xargsআরো লাইন বিভাজন ফলাফল, আমার আদেশ যুক্তি ভঙ্গ যায়)। সুতরাং trলাইন ফিডের +(প্লাস) চিহ্ন সহ প্রতিস্থাপনের যত্ন নিচ্ছেন । চূড়ান্ত (বেসিক ক্যালকুলেটর) কমান্ড থেকে অভিযোগ এড়াতে ফলস্বরূপ স্ট্রিং থেকে sedশেষ +চিহ্নটি সরিয়ে ফেলার একমাত্র লক্ষ্য রয়েছে যা bcযথারীতি গণিত করে।

পারফরম্যান্স: আমি এটি বেশ কয়েকটি ডিরেক্টরিতে পরীক্ষা করেছি এবং top 150.000 ফাইলের শীর্ষে (আমার ফেডোরার 15 বাক্সের ফাইলগুলির বর্তমান সংখ্যা) আমি বিশ্বাস করি যা এটি একটি আশ্চর্যজনক ফলাফল:

# time echo `find / -type f -exec stat -c %s {} \; | tr '\n' '+' | sed 's/+$//g'` | bc
12671767700

real    2m19.164s
user    0m2.039s
sys 0m14.850s

আপনি যদি du -sb /কমান্ডের সাথে তুলনা করতে চান তবে এটি বাইটে ( -bবিকল্প) ডিস্কের একটি আনুমানিক ডিস্ক ব্যবহার করবে

# du -sb /
12684646920 /

যেহেতু আমি প্রত্যাশা করছিলাম এটি আমার কমান্ড গণনার চেয়ে কিছুটা বড় কারণ duইউটিলিটি প্রতিটি ফাইলের বরাদ্দ স্থান দেয় এবং আসল গ্রাসিত স্থান নয় not

[প্রারম্ভিক সংস্করণ] আপনার ফোল্ডারের সঠিক পরিমাণের আকার জানা দরকার থাকলে আপনি আদেশটি
ব্যবহার করতে পারবেন না duকারণ (ম্যান পৃষ্ঠার উদ্ধৃতি হিসাবে)du ফাইল স্থানের ব্যবহারের অনুমান করে। সুতরাং এটি আপনাকে একটি ভুল ফলাফলের দিকে নিয়ে যাবে, একটি আনুমানিক (সম্ভবত যোগফলের আকারের কাছাকাছি তবে সম্ভবত আপনি যে প্রকৃত আকারটি সন্ধান করছেন তার চেয়ে বেশি)।

আমি মনে করি আপনার প্রশ্নের উত্তর দেওয়ার বিভিন্ন উপায় থাকতে পারে তবে এটি আমার:

ls -l $(find . -type f | xargs) | cut -d" " -f5 | xargs | sed 's/\ /+/g'| bc

এটি এর অধীনে সমস্ত ফাইল সন্ধান করে। ডিরেক্টরি (পরিবর্তন করুন। আপনার পছন্দসই ডিরেক্টরি সহ), লুকানো ফাইলগুলিও অন্তর্ভুক্ত থাকে এবং (ব্যবহার করে xargs) তাদের নামগুলি একটি লাইনে আউটপুট করে, তারপরে ব্যবহার করে একটি বিশদ তালিকা তৈরি করে ls -l। এটি (কখনও কখনও) বিশাল আউটপুটটি কাট কমান্ডের দিকে পাইপ করা হয় এবং কেবল পঞ্চম ক্ষেত্র ( -f5), যা ফাইল আকারে বাইট হয় এবং আবার পাইপ করা হয় xargsযা আবার ফাঁকা দ্বারা পৃথক আকারের একক লাইন তৈরি করে produces এখন একটি সেড ম্যাজিক রাখুন যা প্রতিটি ফাঁকা স্থানের পরিবর্তে প্লাস ( +) চিহ্ন এবং সর্বশেষে bc(বেসিক ক্যালকুলেটর) গণিত করে।

এটির জন্য অতিরিক্ত সুরের প্রয়োজন হতে পারে এবং আপনার lsপক্ষে আর্গুমেন্টের তালিকাটি দীর্ঘ দীর্ঘায়িত করার জন্য কমান্ড থাকতে পারে ।


ডিরেক্টরিটি যদি খুব বড় হয় তবে এটি দীর্ঘ সময়ের জন্য স্তব্ধ হয়ে যায়, আপনার হোম ডিরেক্টরিতে কাজ করার চেষ্টা করুন: পি
কিট হো

@ কিটহো, আমি ভীত, প্রতিটি ফাইল অনুসন্ধান না করে এবং এর আকার যুক্ত না করে সুনির্দিষ্ট ফলাফল পাওয়ার সহজ এবং দ্রুত কোন উপায় নেই, সুতরাং কমান্ডের অলসতা মূলত অনুসন্ধানের ডিরেক্টরিটির নীচে কতগুলি ফাইল রয়েছে তার উপর নির্ভর করে ... তবে আমি বিশ্বাস করি সেখানে উন্নতির জন্য মার্জিন ... চমৎকার চ্যালেঞ্জ!
ztank1013

@ কিটহো ওহে, আমার উত্তরের বর্ধিত সংস্করণটি একবার দেখুন ... এবং অবশ্যই আমাকে জানান!
ztank1013

0

আর একটি সহজ সমাধান।

$ for entry in $(ls); do du -s "$entry"; done | sort -n

ফলাফল দেখতে হবে

2900    tmp
6781    boot
8428    bin
24932   lib64
34436   sbin
90084   var
106676  etc
125216  lib
3313136 usr
4828700 opt

"du -s" কে "du -sh" এ পরিবর্তন করা মানব পাঠযোগ্য আকার প্রদর্শন করবে তবে আমরা এই পদ্ধতিতে বাছাই করতে সক্ষম হব না।


0

আপনি du -h | আকার দ্বারা ফাইলগুলি তালিকা করতে নীচেরটি ব্যবহার করতে পারেন বাছাই - hr | more or du -h --max-গভীরতা = 0 * | বাছাই - hr | অধিক


0

আমি একটি সহজ উপায়ে du ব্যবহার করার ঝোঁক।

du -sh */ | sort -n

ডিরেক্টরিগুলি সর্বাধিক স্থান ব্যয় করছে সে সম্পর্কে এটি আমাকে ধারণা দেয়। আমি পরে আরও সুনির্দিষ্ট অনুসন্ধান চালাতে পারি।


এই ধরণের কাজ করে, তবে বাছাই করার সময় ফাইলের আকারের এককগুলিকে উপেক্ষা করে।
বেনিয়ামিন এনগওয়াল
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.