আকার অনুসারে অর্ডার করা সমস্ত ফাইল কীভাবে তালিকাভুক্ত করা যায়


241

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



5
থেকে man ls:-S sort by file size
ctrl-alt-delor

আপনার অর্থ কী "ফাইলগুলি এই ডিরেক্টরিতে রয়েছে", বা "ফাইলগুলি কোনও উপ ডিরেক্টরিতে থাকতে পারে"।
ctrl-alt-delor

আপনি যদি কোনও জিইউআই সরঞ্জাম ব্যবহার করতে সক্ষম / চান, তবে কিডিআরস্ট্যাটটি দেখুন , পূর্বে কেডিআরস্ট্যাট
রাইনোডেভেল

উত্তর:


290

সহজভাবে কিছু ব্যবহার করুন:

ls -lS /path/to/folder/

মূলধন এস

এটি আকার অনুসারে ফাইলগুলি বাছাই করবে।

আরও দেখুন:

man ls

-S     sort by file size

যদি আপনি বিপরীত ক্রম অনুসারে বাছাই করতে চান তবে কেবল -rস্যুইচ যুক্ত করুন।

হালনাগাদ:

ডিরেক্টরিগুলি বাদ দিতে (এবং কোনও ফাইলের নাম বা সিমলিংক লক্ষ্যগুলিতে নতুন লাইনের অক্ষর নেই) সরবরাহ করতে পারেন:

ls -lS | grep -v '^d' 

আপডেট 2:

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

একটির জন্য ফিল্টার করতে কমান্ডটি পরিবর্তন করুন -। এটি কেবল নিয়মিত ফাইলগুলি রেখে দেয়:

ls -lS | grep '^-'

আমার সিস্টেমে এটি কেবল নিয়মিত ফাইলগুলি দেখায়।

আপডেট 3:

পুনরাবৃত্তি যোগ করতে, আমি sortকমান্ডের রেখাগুলি বাছাই করে ছেড়ে দিয়ে the ম কলামটি বাছাই করতে বলব।

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

-rnশীর্ষস্থানীয় বৃহত্তম ফাইলগুলি পেতে বিপরীত এবং সংখ্যাসূচক অর্থ। এই কমান্ডের নীচের দিকটি হ'ল এটি ফাইলগুলির সম্পূর্ণ পথ প্রদর্শন করে না।

আপনার যদি ফাইলগুলির পুরো পথের প্রয়োজন হয় তবে এই জাতীয় কিছু ব্যবহার করুন:

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

findকমান্ড যাও recursively সব সাব ডিরেক্টরিগুলি থেকে সব ফাইল পাবেন .এবং কল du -h(অর্থাত ডিস্কের ব্যবহার -humanreadable ) এবং তারপর আবার আউটপুট সাজাতে। যদি আপনার find/ sortসমর্থন করে না -h, সাথে du -kএবং এর সাথে প্রতিস্থাপন করুন sort -rn। নোট করুন যে আকার এবং ডিস্কের ব্যবহার একই জিনিস নয়।


5
duফাইলের আকার থেকে পৃথক ডিস্কের ব্যবহার দেয়। (জিএনইউ) দিয়ে du -h, সংখ্যাসূচক সাজানো কাজ করবে না (আপনার -hবাছাই করার জন্য জিএনইউ বিকল্পের প্রয়োজন হবে )। xargs সম্ভবত উদ্ধৃত শব্দের একটি তালিকা ইনপুট হিসাবে প্রত্যাশা করে তাই যদি ফাইলের নামগুলি ফাঁকা বা উদ্ধৃত অক্ষর থাকে তবে এটি কাজ করবে না।
স্টাফেন চেজেলাস

1
আমি দেখতে পাচ্ছি যে এস এস ক্রমহীন আকার অর্ডার করে, আরোহী অর্ডার সম্পর্কে কী?
ডেমোঙ্গোলেম

3
@ StéphaneChazelas পর এই আমার জন্য কাজ করে: find . -type f -print0 | xargs -0 du -h | sort -rh। আপনি শুধু বলতে বৃহত্তম 30 ফাইল চাইলে: find . -type f -print0 | xargs -0 du -h | sort -rh | head -n 30
ব্যবহারকারী 7543

ওহে! আপনি দয়া করে + |সিনট্যাক্স ব্যাখ্যা করতে পারেন + | sort -r -h?
ভিক্টর

@Victor, দয়া করে দেখুন unix.stackexchange.com/questions/195939/...
হিউ ওল্ফ

25

আপনি সন্ধান এবং সাজানোর মতো কিছু ব্যবহার করতে পারেন।

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

( -lsবিকল্পটি মানসম্পন্ন নয় তবে অনেকগুলি অনুসন্ধান বাস্তবায়নগুলিতে পাওয়া যায়, কেবল জিএনইউ এক ls -liনয় G

যদি জিএনইউ অনুসন্ধান এবং জিএনইউ সাজানোর সাথে ফাইলের নামগুলিতে নতুন লাইন অক্ষর থাকতে পারে:

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

এটি ধরে নিয়েছে "গোষ্ঠী" কলাম (-l) থেকে কোনও স্পেস নেই (অতএব-কে 7 পরামিতি) নেই, তবে এটি অবশ্যই প্রয়োজন হয় না।
কলিস্টিভরা

1
কেন কেবল সন্ধান করছেন না ... -প্রিন্ট 0 | সাজান -zk7rn0?
আন্দ্রে দে মিরান্ডা

10

Zsh এবং GNU এলএস সহ:

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

কোথায় (.OL)একটি হল উল্লিখিত glob কোয়ালিফায়ার , .নির্বাচন করতে নিয়মিত শুধুমাত্র ফাইল, OL(ফাইল সাইজ দৈর্ঘ্য দ্বারা অর্ডার বিপরীত o অর্ডার আরোহী জন্য, Oসাজানো জন্য)।

(নোট করুন যে zsh এর পুরানো সংস্করণগুলিতে ফাইল ফাইলের আকার 2 file 32 এর বেশি ছিল)।

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

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

আপনি যদি কেবলমাত্র ফাইলগুলির তালিকা চান এবং বিশদ আউটপুট না চান, কেবল করুন:

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

আপনি যদি লুকানো ফাইলগুলি অন্তর্ভুক্ত করতে চান (যার নামটি বিন্দু দিয়ে শুরু হয় .এবং ব্যতীত ..) এবং লুকানো ডিরেক্টরিতেও অনুসন্ধান করতে চান তবে Dগ্লোবিং কোয়ালিফায়ার যুক্ত করুন:

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

কি করে .OL? এই আদেশের অংশ?
alpha_989

@ আলফা_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: তালিকার ক্রমকে বিপরীত করে

উত্তরের মান উন্নত করতে বিকল্পগুলি ব্যাখ্যা করতে আপনি কি আপত্তি করবেন?
রুই এফ রিবেইরো

6

"ফাইলগুলি একটি নির্দিষ্ট ফোল্ডারে যে কোনও জায়গায় উপস্থিত থাকতে পারে" এই কথাটি বোঝায় যে আপনি সূচনা ডিরেক্টরি (ফোল্ডার) এর মধ্যে সমস্ত ডিরেক্টরি (ফোল্ডার) পুনরাবৃত্তভাবে অবতরণ করতে চান। এটিই হ'ল findবোঝাতে:

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

এটি বর্তমান ওয়ার্কিং ডিরেক্টরিতে ( ) ডিরেক্টরিতে সমস্ত ফাইল "সন্ধান করে" .। পাওয়া প্রতিটি ফাইলের জন্য, lsআকার ক্রমে পাওয়া বস্তুগুলি বাছাই করতে একটি প্রক্রিয়া চালিত হয়। +থেকে টারমিনেটর -execকারণ একাধিক আর্গুমেন্ট করার জন্য একটি তালিকা হিসাবে গৃহীত হবে ls। আপনার ডিরেক্টরিতে (ফোল্ডারটিতে) খুব বড় সংখ্যক ফাইল উপস্থিত না থাকলে আপনার একটি তালিকা থাকা উচিত (এবং এইভাবে একটি প্রক্রিয়া কাঁটাযুক্ত), যা আপনার পছন্দসই ফলাফলের দিকে পরিচালিত করে।


1
এটি দুর্দান্ত কারণ এটি আপনাকে ভাল ফাইলের মাপ দেখাতে ls -h সংশোধক ব্যবহার করতে দেয়
shmish111

4

বিপরীত ক্রমে ফাইল তালিকা প্রদর্শন: ls -lSrh

আরোহী আদেশের জন্য: ls -lSh


1
মানব-বান্ধব আউটপুট জন্য -h পতাকা ব্যবহারের জন্য +1।
কম্পিউটিংফ্রেক

2

আমি কিছুক্ষণ আগে এই পরিমাণে কিছু লিখেছি। আপনি কতগুলি ফাইল তালিকাভুক্ত করবেন তা নির্দিষ্ট করার জন্য আপনি একটি যুক্তিটি পাস করতে পারেন, বা bigআপনি কী ক্ষেত্রে 10 পেয়েছেন তা টাইপ করুন ।

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

2

এগুলি ব্যবহার করে দেখুন, এটি আমার পক্ষে ভাল কাজ করে।

$ 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
ফাইলের নামগুলিতে কোনও স্পেস না থাকলে অ্যাডাব্লিক ঠিকঠাক কাজ করে।
ইয়ার নিম

হ্যাঁ .. 'সেড' ব্যবহার করুন এবং স্থানকে আন্ডারস্কোর দিয়ে প্রতিস্থাপন করবেন? যদি এটি সহায়তা করে
Sand1512

না, আমি sedআউটপুট কাটতে ব্যবহার করি
Eir Nym

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

কিলোবাইট ইউনিটগুলিতে, বিএসডি / ওএসএক্স / অন্যগুলিতে:

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

মাপগুলি মেগাবাইটে ( mইন 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) পাওয়া যায়।

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