ডিরেক্টরি এবং এর উপ-ডিরেক্টরিগুলির বৃহত্তম ফাইলটি কীভাবে সন্ধান করবেন?


102

আমরা কেবল একটি ইউনিক্স ক্লাস শুরু করছি এবং বিভিন্ন বাশ কমান্ড শিখছি। আমাদের অ্যাসাইনমেন্টের সাথে একটি ডিরেক্টরিতে বিভিন্ন কমান্ড সম্পাদন করা জড়িত যার এর অধীনে বেশ কয়েকটি ফোল্ডার রয়েছে।

রুট ফোল্ডার থেকে সমস্ত নিয়মিত ফাইলগুলি কীভাবে তালিকাবদ্ধ এবং গণনা করতে হয় তা আমি জানি:

find . -type l | wc -l

তবে আমি পুরো ডিরেক্টরিটির বৃহত্তম ফাইলটি সন্ধান করতে সেখান থেকে কোথায় যেতে চাই তা জানতে চাই। আমি একটি duকমান্ড সম্পর্কিত কিছু দেখেছি , কিন্তু আমরা তা শিখিনি, সুতরাং আমরা যে জিনিসগুলি শিখেছি তার সন্ধানে আমি ধরে নিই যে আমাদের এটি কোনওভাবে ls -tকমান্ডের সাথে সংযুক্ত করার প্রয়োজন ।

আমার 'লিঙ্গো' সঠিক না হলে আমাকে ক্ষমা করুন, আমি এখনও এটিতে অভ্যস্ত হয়েছি!


2
যদি আপনি কোনও কমান্ড সম্পর্কে জানেন, তবে কীভাবে এটি ব্যবহার করবেন তা নিশ্চিত না manহলে আপনার আগ্রহী আদেশটি অনুসরণ করে টাইপ করার চেষ্টা করুন that কমান্ডটির জন্য একটি দুর্দান্ত ম্যানুয়াল এন্ট্রি পপ করবে ( qকমান্ড লাইনে ফিরে যেতে টিপুন )।
ডুনস

উত্তর:


126

এই লিঙ্কটি থেকে উদ্ধৃতি-

যদি আপনি কোনও বিশেষ ডিরেক্টরি এবং এর উপ ডিরেক্টরিতে শীর্ষ 10 টি বড় ফাইলের নাম (ডিরেক্টরি নয়) মুদ্রণ করতে চান তবে

$ find . -printf '%s %p\n'|sort -nr|head

বর্তমান ডিরেক্টরিটিতে সীমাবদ্ধ করতে অনুসন্ধানের সাথে "-maxdepth 1" ব্যবহার করুন।

$ find . -maxdepth 1 -printf '%s %p\n'|sort -nr|head

এবং শীর্ষ 10 বৃহত্তম "ফাইল এবং ডিরেক্টরিগুলি" মুদ্রণ করতে:

$ du -a . | sort -nr | head

** শীর্ষ এক্স বৃহত্তম ফাইলগুলি মুদ্রণের জন্য উপরের একমাত্র "মাথার" পরিবর্তে "হেড-এন এক্স" ব্যবহার করুন (উপরের সমস্ত উদাহরণে)


1
"ডু-এ। | সাজানো-এনআর | হেড" আসল ফাইলের আকারের তুলনায় কেবি সংখ্যার দ্বিগুণ কেন ফিরে আসে?
xxjjnn

6
আহ, আপনাকে 'কে' বিকল্পটি যুক্ত করতে হবে বা এটি
1024 এর

2
প্রথমটির জন্য, আপনি কীভাবে একটি মানব পাঠযোগ্য বিন্যাসে আকার পাবেন?
ব্লুজ

@Bluz আমি প্রতিস্থাপন চেষ্টা চাই '%s %p\n'সঙ্গে '%p\n'এবং যোগ করার |xargs ls -lhশেষ
ডানকান এক্স সিম্পসন

6
প্রথম সমাধান আমার জন্য OS X এর উপর কাজ করে নি, তাই আমি জানতে তৃতীয় সমাধান থেকে ডিরেক্টরি ফিল্টার একটি দ্রুত হ্যাক ব্যবহার শেষ পর্যন্ত: du -am . | sort -nr | grep '\..*\.' | head। এটি mহ'ল মেগাবাইটে ফাইলের আকার প্রদর্শন করা হবে এবং grepকমপক্ষে দুটি বিন্দু সহ লাইন দেখানোর জন্য ব্যবহৃত হবে, প্রথমটি ./পথের মধ্যে রয়েছে, দ্বিতীয়টি ফাইল এক্সটেনশনে রয়েছে, যেমন .mov
psmith

63

বর্তমান ডিরেক্টরি এবং এর উপ-ডিরেক্টরিতে শীর্ষ 25 ফাইলগুলি সন্ধান করতে:

find . -type f -exec ls -al {} \; | sort -nr -k5 | head -n 25

এটি "सॉर्ट -nr -k5" পাইপড কমান্ডের মাধ্যমে ফাইলের আকারের ভিত্তিতে বাছাই করে শীর্ষ 25 টি ফাইল আউটপুট দেবে।

একই তবে মানব-পঠনযোগ্য ফাইল মাপের সাথে:

find . -type f -exec ls -alh {} \; | sort -hr -k5 | head -n 25


10
find . -type f | xargs ls -lS | head -n 1

আউটপুট

-rw-r--r--  1 nneonneo  staff  9274991 Apr 11 02:29 ./devel/misc/test.out

আপনি যদি কেবল ফাইলের নাম চান:

find . -type f | xargs ls -1S | head -n 1

এটি ব্যবহার এড়ানো awkএবং আপনি যে পতাকাটি চান তা ব্যবহার করতে দেয় ls

গুহা । যেহেতু xargsওভারলংগ কমান্ড লাইনগুলি এড়াতে চেষ্টা করে, এটি যদি আপনি অনেকগুলি ফাইলের সাথে কোনও ডিরেক্টরিতে চালনা করেন তবে এটি ব্যর্থ হতে পারে কারণ lsএকাধিকবার কার্যকর হয়। এটি কোনও দুর্গম সমস্যা নয় (আপনি head -n 1প্রতিটি অনুরোধ থেকে আউটপুট সংগ্রহ করতে পারেন lsএবং ls -Sআপনার একবারে একটি ফাইল না হওয়া পর্যন্ত লুপিং করে চালাতে পারেন) তবে এটি কিছুটা হলেও এই পদ্ধতির ক্ষতি করে না।


আমি দুঃখিত xargs, আমি আপনাকে অবহেলা করেছি +1
স্টিভ

2
শূণ্যস্থান সঙ্গে হ্যান্ডেল ফাইলের নাম, ব্যবহারfind . -type f -print0 | xargs -0 ls -lS | head -n 1
rymo

এটি প্রথম ব্যাচের xargsমধ্যে কার্যকর হওয়া সর্বাধিক ফাইল খুঁজে পায় finds সমাধানের জন্য এটা বাছাই যোগ করুন: find . -type f -print0 | xargs -0 ls -lS | sort -rk 5 | head -n 10। আমার জন্য ওএসএক্সে কাজ করেছেন।
psmith

10

লিনাক্স / ইউএনআইএক্স / বিএসডি ফাইল সিস্টেমের বৃহত্তম ফাইল / ডিরেক্টরি খুঁজে পাওয়ার জন্য সহজ কমান্ড নেই available তবে, নিম্নলিখিত তিনটি কমান্ডের সমন্বয় (পাইপ ব্যবহার করে) আপনি সহজেই বড় ফাইলগুলির তালিকা খুঁজে পেতে পারেন:

# du -a /var | sort -n -r | head -n 10

আপনি যদি আরও বেশি মানুষের পঠনযোগ্য আউটপুট চান তবে চেষ্টা করুন:

$ cd /path/to/some/var
$ du -hsx * | sort -rh | head -10

কোথায়,

  • ভার ডিরেক্টরি আপনি অনুসন্ধান করতে চান
  • du কমান্ড -h বিকল্প: মানব পাঠযোগ্য বিন্যাসে মাপ প্রদর্শন করুন (যেমন, 1 কে, 234 এম, 2 জি)।
  • du কমান্ড -s বিকল্প: প্রতিটি যুক্তি (সংক্ষিপ্তসার) জন্য মোট দেখান।
  • du কমান্ড-এক্স বিকল্প: বিভিন্ন ফাইল সিস্টেমে ডিরেক্টরিগুলি এড়িয়ে যান।
  • সাজানো কমান্ড -r বিকল্প: তুলনা ফলাফল বিপরীত।
  • কমান্ড -h বিকল্পটি সাজান: মানব পাঠযোগ্য সংখ্যাগুলির তুলনা করুন। এটি কেবলমাত্র জিএনইউ সাজানোর নির্দিষ্ট বিকল্প।
  • হেড কমান্ড -10 অথবা -n 10 বিকল্প: প্রথম 10 লাইন প্রদর্শন করুন।

আমি ২ য় কমান্ডটি আরও ভাল পছন্দ করি তবে ওএসএক্সে, সাজানো সংস্করণের জন্য কোনও -h বিকল্প ইনস্টল করা নেই। ম্যাকের জন্য হওয়া উচিত: du -hhx * | সাজানো -আরএন | শিরোনাম -10
ইয়ান ভিআর

1
দ্বিতীয় আদেশটি প্রেম! আমি চেষ্টা করেছি এমন সবার মধ্যে সেরা - আমি এটি পরবর্তী সময়ে সংরক্ষণ করব।
কোডমাউস

কমান্ডটি বিশদভাবে স্পষ্টভাবে ব্যাখ্যা করে +1
হরিশ

8

এটি ফাইলগুলি পুনরাবৃত্তির সাথে তালিকাভুক্ত করে যদি তারা সাধারণ ফাইল হয় তবে the তম ক্ষেত্র অনুসারে সাজানো (যা আমার findআউটপুটে আকারযুক্ত; আপনার পরীক্ষা করে দেখুন) এবং কেবল প্রথম ফাইলটি দেখায়।

find . -type f -ls | sort +7 | head -1

প্রথম বিকল্পটি findপুনরাবৃত্ত অনুসন্ধানের জন্য সূচনার পথ। fসাধারণ ফাইলগুলির জন্য অনুসন্ধানের এক ধরণের । নোট করুন যে আপনি যদি ফাইল ফাইল হিসাবে পার্স করার চেষ্টা করেন তবে ফাইলনেমে ফাঁকা স্থান, নিউলাইনস বা অন্যান্য বিশেষ অক্ষর থাকলে আপনি ব্যর্থ হতে পারেন। sortঅপারেটিং সিস্টেম দ্বারা বিকল্পগুলিও পৃথক হতে পারে। আমি ফ্রিবিএসডি ব্যবহার করছি।

একটি "আরও ভাল" তবে আরও জটিল এবং ভারী সমাধান findহ'ল ডিরেক্টরিগুলি অতিক্রম করতে হবে তবে সম্ভবত statফাইলটি সম্পর্কে বিস্তারিত জানার জন্য সম্ভবত awkসবচেয়ে বড় আকারটি খুঁজে পেতে ব্যবহার করুন । নোট করুন যে এর আউটপুট statআপনার অপারেটিং সিস্টেমের উপরও নির্ভর করে।


1
+7আর্গ বলতে কি বোঝানো হচ্ছে? আমার মেশিনে বাছাই করে কেবল অভিযোগ করে যে এটি কল করা কোনও ফাইল খুঁজে পাচ্ছে না +7
ডুনস

@ ডুনস - যেমনটি আমি বলেছি, sortআপনার সিস্টেমে ম্যান পৃষ্ঠাটি দেখুন । আমি এই মুহুর্তে ওএস এক্স 10.4 ব্যবহার করছি, যেখানে ফ্রিবিএসডি এর ধরণের ব্যবহার থেকে প্রাপ্ত : sort [-cmus] [-t separator] [-o output-file] [-T tempdir] [-bdfiMnr] [+POS1 [-POS2]] [-k POS1[,POS2]] [file...]... দ্রষ্টব্য +POS [-POS2]। এটি ফ্রিবিএসডি-র বর্তমান সংস্করণগুলিতেও কাজ করে।
ঘোটি

2
আপনার কাছে আমার কাছে আলাদা সাজানোর প্রোগ্রাম রয়েছে বলে মনে হচ্ছে। এটি আমার সাজানোর প্রোগ্রামের ম্যান পেজ - linux.die.net/man/1/sort আমার মেশিনে কাজ করার জন্য আপনাকে স্পষ্টভাবে আরগ উদাহরণটি ব্যবহার করতে হবে -ksort -k 7। সম্পাদনা করুন: ওএসএক্স 10.5 দ্বারা সাজানোর জন্য ম্যান পৃষ্ঠাটি আমার কাছে থাকা সংস্করণে পরিবর্তিত হয়েছে বলে মনে হচ্ছে।
ডুনস

1
@ ডুনস - এটি সমস্ত জিএনইউ সাজান, তবে বিভিন্ন সংস্করণ। [+POS1] [-POS2]স্বরলিপি শুধু একটি পুরোনো এক। আমি যতদূর বলতে পারি, এই লিখনটি এখনও আধুনিক জিএনইউ বাছাই দ্বারা সমর্থিত, যদিও এখন আমি দেখতে পাচ্ছি, মনে হয় এটি সংস্করণ 5.1 এর পরে বাছাই করা ম্যান পৃষ্ঠা থেকে বাদ পড়েছে। আপনি এটি ফ্রিবিএসডি 4.11 এর জন্য বাছাই করার জন্য ম্যান পৃষ্ঠায় দেখতে পারেন । আমার ধারণা, ফ্রিবিএসডি 5.0 প্রকাশের আগে থেকে আমি সাজ্টের ম্যান পৃষ্ঠাটি পড়িনি!
ঘোটি

এছাড়াও, নোট করুন যে +POS1শূন্য থেকে প্যারামিটারগুলি গণনা করা হয়, যেখানে -k POS1একটির থেকে গণনা করা হয়।
ঘোটি

6

এটি আপনার বর্তমান কার্যকারী ডিরেক্টরিতে বৃহত্তম ফাইল বা ফোল্ডারটি খুঁজে পাবেন:

ls -S /path/to/folder | head -1

সমস্ত উপ ডিরেক্টরিতে বৃহত্তম ফাইল সন্ধান করতে:

find /path/to/folder -type f -exec ls -s {} \; | sort -nr | awk 'NR==1 { $1=""; sub(/^ /, ""); print }'

আমি মনে করি ls এর ডিফল্ট আচরণ হ'ল কলামগুলিতে ফাইলগুলি তালিকাভুক্ত করা (অর্থাত্ প্রতি লাইনে বেশ কয়েকটি এন্ট্রি), সুতরাং প্রথমটি ঠিক ঠিক বৃহত্তম ফাইল খুঁজে পায় না। আপনার দ্বিতীয় কমান্ডের সাথে এটি কেবলমাত্র প্রদত্ত ডিরেক্টরিতে সবচেয়ে বড় ফাইল খুঁজে পেয়েছিল এবং এর উপ-ডিরেক্টরিগুলি নয়।
ডুনস

@ ডুনস: আপনি সঠিক, প্রথম কমান্ড ডিরেক্টরি খুঁজে পেতে পারে তবে এর ডিফল্ট আচরণের কারণে নয় ls। আমার পরীক্ষায় -Sপতাকাটি প্রতি লাইনে একটি ফাইল তালিকাবদ্ধ করে। আমি দ্বিতীয় কমান্ড সংশোধন করেছি। আশা করি এখন এটি সম্পূর্ণ-প্রমাণ ধন্যবাদ.
স্টিভ

4

সোলারিসে আমি ব্যবহার করি:

find . -type f -ls|sort -nr -k7|awk 'NR==1{print $7,$11}' #formatted

অথবা

find . -type f -ls | sort -nrk7 | head -1 #unformatted

কারণ এখানে পোস্ট করা অন্য কিছু কাজ করে না। এটি $PWDএবং উপ-ডিরেক্টরিগুলিতে বৃহত্তম ফাইলটি খুঁজে পাবেন ।


2

নিম্নলিখিত ওয়ান-লাইনার ব্যবহার করুন (শীর্ষ -২০ টি বৃহত্তম ফাইল প্রদর্শন করুন):

ls -1Rs | sed -e "s/^ *//" | grep "^[0-9]" | sort -nr | head -n20

বা (মানব পাঠযোগ্য আকার):

ls -1Rhs | sed -e "s/^ *//" | grep "^[0-9]" | sort -hr | head -n20

অন্যান্য উত্তরের তুলনায় লিনাক্স / বিএসডি / ওএসএক্সের অধীনে সূক্ষ্মভাবে কাজ করে, কারণ অনুসন্ধানের -printfবিকল্পটি ওএসএক্স / বিএসডি তে বিদ্যমান নেই এবং statওএসের উপর নির্ভর করে বিভিন্ন পরামিতি রয়েছে। তবে ওএসএক্স / বাসদ কাজ সঠিকভাবে দ্বিতীয় কমান্ড (যেমন sortনেই -h), ইনস্টল sortথেকে coreutilsবা সরানোর -hথেকে lsএবং ব্যবহার sort -nrপরিবর্তে।

সুতরাং এই এলিয়াসগুলি আপনার আরসি ফাইলগুলিতে থাকতে দরকারী :

alias big='du -ah . | sort -rh | head -20'
alias big-files='ls -1Rhs | sed -e "s/^ *//" | grep "^[0-9]" | sort -hr | head -n20'

এটি কেবল কোনও পথ ছাড়াই ফাইলের নাম দেখায়, তাই প্রকৃতপক্ষে সবচেয়ে বড় ফাইলটি খুঁজে পেতে সত্যিই সহায়তা করে না।
psmith

আমার উপরে আমার কাছে সত্যিই সবচেয়ে বড় ফাইল রয়েছে তবে শেষ পর্যন্ত এটি আমাকে সঠিক ফাইল দেয় না
বোরিসালভ মার্কভ

2

কমান্ড নিম্নলিখিত চেষ্টা করুন:

find /your/path -printf "%k %p\n" | sort -g -k 1,1 | awk '{if($1 > 500000) print $1/1024 "MB" " " $2 }' |tail -n 1 

এটি বৃহত্তম ফাইলের নাম এবং আকার এবং 500 এম এর বেশি মুদ্রণ করবে। আপনি এটি স্থানান্তর করতে পারেন if($1 > 500000), এবং এটি ডিরেক্টরিতে বৃহত্তম ফাইল মুদ্রণ করবে।



0

এই স্ক্রিপ্টটি পরবর্তী কর্মের জন্য বৃহত্তম ফাইলগুলি সন্ধানকে সহজ করে। আমি এটিকে আমার bin / বিন ডিরেক্টরিতে রেখেছি এবং আমার $ PATH এ ~ / বিন রাখি।

#!/usr/bin/env bash
# scriptname: above
# author: Jonathan D. Lettvin, 201401220235

# This finds files of size >= $1 (format ${count}[K|M|G|T], default 10G)
# using a reliable version-independent bash hash to relax find's -size syntax.
# Specifying size using 'T' for Terabytes is supported.
# Output size has units (K|M|G|T) in the left hand output column.

# Example:
#   ubuntu12.04$ above 1T
#   128T /proc/core

# http://stackoverflow.com/questions/1494178/how-to-define-hash-tables-in-bash
# Inspiration for hasch: thanks Adam Katz, Oct 18 2012 00:39
function hasch() { local hasch=`echo "$1" | cksum`; echo "${hasch//[!0-9]}"; }
function usage() { echo "Usage: $0 [{count}{k|K|m|M|g|G|t|T}"; exit 1; }
function arg1() {
    # Translate single arg (if present) into format usable by find.
    count=10; units=G;  # Default find -size argument to 10G.
    size=${count}${units}
    if [ -n "$1" ]; then
        for P in TT tT GG gG MM mM Kk kk; do xlat[`hasch ${P:0:1}`]="${P:1:1}"; done
        units=${xlat[`hasch ${1:(-1)}`]}; count=${1:0:(-1)}
        test -n "$units" || usage
        test -x $(echo "$count" | sed s/[0-9]//g) || usage
        if [ "$units" == "T" ]; then units="G"; let count=$count*1024; fi
        size=${count}${units}
    fi
}
function main() {
    sudo \
        find / -type f -size +$size -exec ls -lh {} \; 2>/dev/null | \
        awk '{ N=$5; fn=$9; for(i=10;i<=NF;i++){fn=fn" "$i};print N " " fn }'
}

arg1 $1
main $size

0

এটি করার সহজ উপায় এটি:

ls -l | tr -s " " " " | cut -d " " -f 5,9 | sort -n -r | head -n 1***

এবং আপনি এটি পাবেন: 8445 examples.desktop


1***শেষে কী করার কথা? আমি এই যুক্তির জন্য একটি "কোনও মিল খুঁজে পাইনি" ত্রুটি পেয়েছি।
ব্যবহারকারী 4815162342

0

লিনাক্স সমাধান: উদাহরণস্বরূপ, আপনি ফাইল / ফোল্ডার আকার অনুযায়ী আপনার বাড়ির (/) ডিরেক্টরিতে সমস্ত ফাইল / ফোল্ডার তালিকা দেখতে চান অবতরণ ক্রম ) ।

sudo du -xm / | সাজানো -আরএন | অধিক


0

একটি ফোল্ডারে বড় ফাইলের তালিকা করতে

ls -sh /pathFolder | sort -rh | head -n 1

এর আউটপুট ls -shএকটি আকারের sএবং মানুষেরh ফাইলের বোধগম্য দৃশ্য।

আপনি ব্যবহার করতে পারে ls -shS /pathFolder | head -n 1। বড় Sথেকে lsইতিমধ্যে ছোট বেশী অপেক্ষাকৃত বড় ফাইল থেকে তালিকা ক্রম কিন্তু প্রথম যে ফোল্ডারে সব ফাইল তার সমষ্টি স্থাপিত। সুতরাং আপনি যদি কেবল বড় ফাইল, একটি ফাইল তালিকাবদ্ধ করতে চান তবে আপনাকে head -n 2"দ্বিতীয় লাইনের ফলাফল" পরীক্ষা করে দেখতে হবে বা এর সাথে প্রথম উদাহরণটি ব্যবহার করতে হবে ls sort head


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