আমি আকার থেকে বড় থেকে ছোট আকারের সমস্ত ফাইল তালিকাবদ্ধ করতে চাই এবং ফাইলগুলি একটি নির্দিষ্ট ফোল্ডারে যে কোনও জায়গায় উপস্থিত থাকতে পারে।
man ls
:-S sort by file size
আমি আকার থেকে বড় থেকে ছোট আকারের সমস্ত ফাইল তালিকাবদ্ধ করতে চাই এবং ফাইলগুলি একটি নির্দিষ্ট ফোল্ডারে যে কোনও জায়গায় উপস্থিত থাকতে পারে।
man ls
:-S sort by file size
উত্তর:
সহজভাবে কিছু ব্যবহার করুন:
ls -lS /path/to/folder/
মূলধন এস ।
এটি আকার অনুসারে ফাইলগুলি বাছাই করবে।
আরও দেখুন:
-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
। নোট করুন যে আকার এবং ডিস্কের ব্যবহার একই জিনিস নয়।
du
ফাইলের আকার থেকে পৃথক ডিস্কের ব্যবহার দেয়। (জিএনইউ) দিয়ে du -h
, সংখ্যাসূচক সাজানো কাজ করবে না (আপনার -h
বাছাই করার জন্য জিএনইউ বিকল্পের প্রয়োজন হবে )। xargs সম্ভবত উদ্ধৃত শব্দের একটি তালিকা ইনপুট হিসাবে প্রত্যাশা করে তাই যদি ফাইলের নামগুলি ফাঁকা বা উদ্ধৃত অক্ষর থাকে তবে এটি কাজ করবে না।
find . -type f -print0 | xargs -0 du -h | sort -rh
। আপনি শুধু বলতে বৃহত্তম 30 ফাইল চাইলে: find . -type f -print0 | xargs -0 du -h | sort -rh | head -n 30
।
+ |
সিনট্যাক্স ব্যাখ্যা করতে পারেন + | sort -r -h
?
আপনি সন্ধান এবং সাজানোর মতো কিছু ব্যবহার করতে পারেন।
find . -type f -ls | sort -r -n -k7
( -ls
বিকল্পটি মানসম্পন্ন নয় তবে অনেকগুলি অনুসন্ধান বাস্তবায়নগুলিতে পাওয়া যায়, কেবল জিএনইউ এক ls -li
নয় G
যদি জিএনইউ অনুসন্ধান এবং জিএনইউ সাজানোর সাথে ফাইলের নামগুলিতে নতুন লাইন অক্ষর থাকতে পারে:
find . -type f -ls -printf '\0' | sort -zk7rn | tr -d '\0'
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
? এই আদেশের অংশ?
ls (GNU coreutils) 8.25
এবং zsh 5.1.1 (x86_64-ubuntu-linux-gnu)
। এটি কি কেবলমাত্র কিছু সংস্করণ ls
এবং এর জন্য কাজ করে zsh
?
আকারে আরোহণ অনুসারে ফাইলগুলি তালিকাবদ্ধ করা হবে:
ls -lSr
বিকল্পগুলি হ'ল:
"ফাইলগুলি একটি নির্দিষ্ট ফোল্ডারে যে কোনও জায়গায় উপস্থিত থাকতে পারে" এই কথাটি বোঝায় যে আপনি সূচনা ডিরেক্টরি (ফোল্ডার) এর মধ্যে সমস্ত ডিরেক্টরি (ফোল্ডার) পুনরাবৃত্তভাবে অবতরণ করতে চান। এটিই হ'ল find
বোঝাতে:
find . -type f -exec ls -lSd {} +
এটি বর্তমান ওয়ার্কিং ডিরেক্টরিতে ( ) ডিরেক্টরিতে সমস্ত ফাইল "সন্ধান করে" .
। পাওয়া প্রতিটি ফাইলের জন্য, ls
আকার ক্রমে পাওয়া বস্তুগুলি বাছাই করতে একটি প্রক্রিয়া চালিত হয়। +
থেকে টারমিনেটর -exec
কারণ একাধিক আর্গুমেন্ট করার জন্য একটি তালিকা হিসাবে গৃহীত হবে ls
। আপনার ডিরেক্টরিতে (ফোল্ডারটিতে) খুব বড় সংখ্যক ফাইল উপস্থিত না থাকলে আপনার একটি তালিকা থাকা উচিত (এবং এইভাবে একটি প্রক্রিয়া কাঁটাযুক্ত), যা আপনার পছন্দসই ফলাফলের দিকে পরিচালিত করে।
বিপরীত ক্রমে ফাইল তালিকা প্রদর্শন: ls -lSrh
আরোহী আদেশের জন্য: ls -lSh
আমি কিছুক্ষণ আগে এই পরিমাণে কিছু লিখেছি। আপনি কতগুলি ফাইল তালিকাভুক্ত করবেন তা নির্দিষ্ট করার জন্য আপনি একটি যুক্তিটি পাস করতে পারেন, বা big
আপনি কী ক্ষেত্রে 10 পেয়েছেন তা টাইপ করুন ।
big () {
NUM_FILES=10;
if [ $1 ]; then
NUM_FILES=$1;
fi;
du | sort -nr | head -n $NUM_FILES
}
এগুলি ব্যবহার করে দেখুন, এটি আমার পক্ষে ভাল কাজ করে।
$ 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
sed
আউটপুট কাটতে ব্যবহার করি
দেহলের জবাব এবং স্টাফেন চেজেলাসের মন্তব্যে যুক্ত করা হচ্ছে ...
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 দেখুন ।
মূল প্রশ্নের ভিন্নতা হিসাবে, আপনি যদি সাব-ডিরেক্টরিতে ফাইলের সংখ্যামূলক আকার দেখতে চান:
#!/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
) পাওয়া যায়।