পুনরাবৃত্ত আকারে ফাইল অনুসারে বাছাই করা হচ্ছে


78

আমাকে একটি ফোল্ডারে সবচেয়ে বড় ফাইলগুলি সন্ধান করতে হবে।
আমি কীভাবে ফোল্ডারটিকে পুনরাবৃত্তভাবে স্ক্যান করব এবং সামগ্রীগুলি আকার অনুসারে বাছাই করব?

আমি ব্যবহার করার চেষ্টা করেছি ls -R -S, তবে এটি ডিরেক্টরিগুলিও তালিকাভুক্ত করে।
আমি চেষ্টা করেও চেষ্টা করেছি find


1
আপনি কি প্রতিটি উপ-ডিরেক্টরিতে পৃথক পৃথকভাবে ফাইলগুলি তালিকাভুক্ত করতে চান বা আপনি সমস্ত সাবডায়ারের সমস্ত ফাইল সন্ধান করতে চান এবং কোন সাবডিরের মধ্যে থাকুক না কেন সে আকারের দ্বারা তালিকাভুক্ত করতে চান? এছাড়াও, আপনি "ডিরেক্টরি" এবং "ফোল্ডার" বলতে কী বোঝায়? আপনি বিভিন্ন জিনিস বর্ণনা করার জন্য এগুলি ব্যবহার করছেন বলে মনে হয়।
টেরডন

আপনি কি বলছেন যে আপনি কেবলমাত্র উপ-ডিরেক্টরিগুলি না দেখিয়ে একটি নির্দিষ্ট ডিরেক্টরিতে ফাইলগুলি পাশাপাশি তার উপ-ডিরেক্টরিগুলিতে ফাইলগুলি তালিকাভুক্ত করতে চান? আপনার প্রশ্নটি চেষ্টা করুন এবং পরিষ্কার করুন, এটি খুব পরিষ্কার নয়।
SLM

উত্তর:


92

আপনি ন্যায়বিচারের সাথে এটিও করতে পারেন du। কেবল নিরাপদ দিকে থাকতে আমি এই সংস্করণটি ব্যবহার করছি du:

$ du --version
du (GNU coreutils) 8.5

অভিগমন:

$ du -ah ..DIR.. | grep -v "/$" | sort -rh

পদ্ধতির ভাঙ্গন

কমান্ডটি du -ah DIRপ্রদত্ত ডিরেক্টরিতে সমস্ত ফাইল এবং ডিরেক্টরিগুলির একটি তালিকা তৈরি করবে DIR-hমানুষের পাঠযোগ্য মাপ যা আমি পছন্দ উত্পাদন করা হবে। আপনি যদি সেগুলি না চান তবে সেই সুইচটি ফেলে দিন। আমি head -6আউটপুট পরিমাণ সীমাবদ্ধ করতে ব্যবহার করছি !

$ du -ah ~/Downloads/ | head -6
4.4M    /home/saml/Downloads/kodak_W820_wireless_frame/W820_W1020_WirelessFrames_exUG_GLB_en.pdf
624K    /home/saml/Downloads/kodak_W820_wireless_frame/easyshare_w820.pdf
4.9M    /home/saml/Downloads/kodak_W820_wireless_frame/W820_W1020WirelessFrameExUG_GLB_en.pdf
9.8M    /home/saml/Downloads/kodak_W820_wireless_frame
8.0K    /home/saml/Downloads/bugs.xls
604K    /home/saml/Downloads/netgear_gs724t/GS7xxT_HIG_5Jan10.pdf

এটিকে সবচেয়ে ছোট থেকে বৃহত আকারে সাজানোর জন্য যথেষ্ট সহজ:

$ du -ah ~/Downloads/ | sort -h | head -6
0   /home/saml/Downloads/apps_archive/monitoring/nagios/nagios-check_sip-1.3/usr/lib64/nagios/plugins/check_ldaps
0   /home/saml/Downloads/data/elasticsearch/nodes/0/indices/logstash-2013.04.06/0/index/write.lock
0   /home/saml/Downloads/data/elasticsearch/nodes/0/indices/logstash-2013.04.06/0/translog/translog-1365292480753
0   /home/saml/Downloads/data/elasticsearch/nodes/0/indices/logstash-2013.04.06/1/index/write.lock
0   /home/saml/Downloads/data/elasticsearch/nodes/0/indices/logstash-2013.04.06/1/translog/translog-1365292480946
0   /home/saml/Downloads/data/elasticsearch/nodes/0/indices/logstash-2013.04.06/2/index/write.lock

এটিকে বিপরীত করুন, বৃহত্তম থেকে ক্ষুদ্রতম:

$ du -ah ~/Downloads/ | sort -rh | head -6
10G /home/saml/Downloads/
3.8G    /home/saml/Downloads/audible/audio_books
3.8G    /home/saml/Downloads/audible
2.3G    /home/saml/Downloads/apps_archive
1.5G    /home/saml/Downloads/digital_blasphemy/db1440ppng.zip
1.5G    /home/saml/Downloads/digital_blasphemy

আমাকে ডিরেক্টরি, কেবল ফাইলগুলি প্রদর্শন করবেন না:

$ du -ah ~/Downloads/ | grep -v "/$" | sort -rh | head -6 
3.8G    /home/saml/Downloads/audible/audio_books
3.8G    /home/saml/Downloads/audible
2.3G    /home/saml/Downloads/apps_archive
1.5G    /home/saml/Downloads/digital_blasphemy/db1440ppng.zip
1.5G    /home/saml/Downloads/digital_blasphemy
835M    /home/saml/Downloads/apps_archive/cad_cam_cae/salome/Salome-V6_5_0-LGPL-x86_64.run

আপনি যদি কেবলমাত্র বৃহত্তম থেকে সবচেয়ে বড়দের তালিকাটি চান তবে শীর্ষ 6 টি আপত্তিকর ফাইলগুলি আপনি সাজানোর স্যুইচটিকে বিপরীত করতে পারেন, ড্রপ ( -r) এবং এর tail -6পরিবর্তে ব্যবহার করতে পারেন head -6

$ du -ah ~/Downloads/ | grep -v "/$" | sort -h | tail -6
835M    /home/saml/Downloads/apps_archive/cad_cam_cae/salome/Salome-V6_5_0-LGPL-x86_64.run
1.5G    /home/saml/Downloads/digital_blasphemy
1.5G    /home/saml/Downloads/digital_blasphemy/db1440ppng.zip
2.3G    /home/saml/Downloads/apps_archive
3.8G    /home/saml/Downloads/audible
3.8G    /home/saml/Downloads/audible/audio_books

14
grep -v "/$"অংশ কাজ করা আপনি যা প্রত্যাশা বলে মনে হচ্ছে না, যেমন ডিরেক্টরি স্ল্যাশ যোগ হবে না। ফলাফল থেকে ডিরেক্টরিগুলি কীভাবে বাদ দিতে হয় কেউ জানেন?
জানু ওয়ার্চো

@ জানেক ওয়ারচল - আপনি কোন সংস্করণটি ব্যবহার করছেন?
SLM

আমি 8.13 এ আছি। তবে যাইহোক, আপনার উত্তরের আউটপুটটিও পিছনে নেই /- উদাহরণস্বরূপ /home/saml/Downloads/audibleএটি একটি ডিরেক্টরি বলে মনে হচ্ছে তবে এর কোনও স্ল্যাশ নেই। শুধু /home/saml/Downloads/স্ল্যাশ আছে, কিন্তু যে সম্ভবত কারণ আপনি এটি একটি স্ল্যাশ সঙ্গে লিখেছিলেন যখন প্রাথমিক জন্য যুক্তি উল্লেখ করেন du
জান ওয়ার্চো


1
এটি কেবল ফাইলগুলি তালিকাভুক্ত করে না, তবে ডিরেক্টরিগুলিও তালিকাভুক্ত করে :(
রোমান গউফম্যান

20

আপনি যদি বর্তমান ডিরেক্টরি এবং এর উপ ডিরেক্টরিগুলির মধ্যে সমস্ত ফাইল সন্ধান করতে চান এবং তাদের আকার অনুযায়ী তাদের তালিকা (তাদের পথ বিবেচনা না করে) তালিকাভুক্ত করতে চান এবং ধরে নিচ্ছেন যে জিএনইউ দিয়ে ফাইলের নামের কোনওটিতেই নতুন লাইন অক্ষর নেই find, আপনি এটি করতে পারেন:

find . -type f -printf "%s\t%p\n" | sort -n

থেকে man findএকটি গনুহ সিস্টেমে:

   -printf format
          True; print format  on  the  standard  output,
          interpreting  `\'  escapes and `%' directives.
          Field widths and precisions can  be  specified
          as  with the `printf' C function.  Please note
          that many of the  fields  are  printed  as  %s
          rather  than  %d, and this may mean that flags
          don't work as you  might  expect.   This  also
          means  that  the `-' flag does work (it forces
          fields to be  left-aligned).   Unlike  -print,
          -printf  does  not add a newline at the end of
          the string.  The escapes and directives are:

          %p     File's name.
          %s     File's size in bytes.

থেকে man sort:

   -n, --numeric-sort
          compare according to string numerical value

দুর্ভাগ্যক্রমে ম্যাকের জন্য কাজ করে না, দেখায়: সন্ধান করুন: -প্রিন্টফ: অজানা প্রাথমিক বা অপারেটর
রোমান গউফম্যান

@ রোমনগাউফম্যান হ্যাঁ, এর কারণেই উত্তরটি জিএনইউ অনুসন্ধান সুনির্দিষ্ট করে । আপনি যদি আপনার ম্যাকটিতে জিএনইউ সরঞ্জামগুলি ইনস্টল করেন তবে এটি সেখানেও কাজ করবে।
terdon

11

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

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

এটি বর্তমান ডিরেক্টরিটিতে পুনরাবৃত্তির সাথে শীর্ষ -২০ টি বৃহত্তম ফাইল তালিকাভুক্ত করবে।

দ্রষ্টব্য: বিকল্প -hজন্য sortযাতে আপনি ইনস্টল করেছেন, ওএসএক্স / বাসদ উপলব্ধ নয় sortথেকে coreutils(যেমন মাধ্যমে brew) এবং স্থানীয় বিন পথ আবেদন PATH, যেমন

export PATH="/usr/local/opt/coreutils/libexec/gnubin:$PATH" # Add a "gnubin" for coreutils.

বিকল্পভাবে ব্যবহার করুন:

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

বৃহত্তম ডিরেক্টরি ব্যবহারের জন্য du, যেমন:

du -ah . | sort -rh | head -20

বা:

du -a . | sort -rn | head -20

3
নিখুঁত, এটিই প্রথম সমাধান যা ম্যাকের জন্য কাজ করে এবং ডিরেক্টরিগুলি দেখায় না :) - আপনাকে ধন্যবাদ!
রোমান গউফম্যান

ফিল্টার কীভাবে কেবল ফাইলের সংখ্যা প্রদর্শন করবে> = এক্স? (এক্স = 0 উদাহরণ হিসাবে)
ম্যাট্রিক্স

7

এটি সমস্ত ফাইল পুনরাবৃত্তভাবে খুঁজে পাবে এবং আকার অনুসারে এগুলি বাছাই করবে। এটি কেবিতে সমস্ত ফাইলের আকার মুদ্রণ করে এবং রাউন্ড ডাউন করে দেয় যাতে আপনি 0 কেবি ফাইল দেখতে পারেন তবে এটি আমার ব্যবহারের জন্য যথেষ্ট কাছে ছিল এবং ওএসএক্স এ কাজ করে।

find . -type f -print0 | xargs -0 ls -la | awk '{print int($5/1000) " KB\t" $9}' | sort -n -r -k1


উবুন্টুতেও কাজ করেছেন ১৪.০৪!
ডেভিড ল্যাম

এটি কেবল ফাইলগুলি নয় ডিরেক্টরিগুলি তালিকাবদ্ধ করে :(
রোমান গউফম্যান

@ রোমনগাউফম্যান - প্রতিক্রিয়াটির জন্য ধন্যবাদ! আমার পরীক্ষাগুলি থেকে, find . -type fফাইলগুলি সন্ধান করে ... এটি পুনরাবৃত্তির সাথে কাজ করে, আপনি ঠিক বলেছেন, তবে এটি সমস্ত ফাইল তালিকাভুক্ত করে, ডিরেক্টরিগুলি নয়
ব্র্যাড পার্কস

Xargs 1980 এর দশকে ব্যবহৃত হয়েছে। 1989 সাল থেকে ডেভিড কর্ন দ্বারা এক্সপ্লাসপ্লাস চালু হওয়ার পরে এটি একটি খারাপ ধারণা।
সুন্দরভাবে

5

এর সাথে zsh, আপনি সর্বাধিক ফাইল ( ls -lডিস্কের ব্যবহার নয়, আউটপুটে আকারের কলামের মতো আপাত আকারের শর্তে ) পাবেন:

ls -ld -- **/*(DOL[1])

6 বৃহত্তম জন্য:

ls -ld -- **/*(DOL[1,6])

ফাইলের আকার দ্বারা যারা সাজাতে আপনি ব্যবহার করতে পারেন ls'র -Sবিকল্প। কিছু lsবাস্তবায়নের তালিকায় বাছাই না করার -Uবিকল্পও রয়েছে ls(এটি ইতিমধ্যে আকার দ্বারা সাজানো zshহয়েছে)।


3

ম্যাক / লিনাক্সের জন্য সহজ সমাধান যা ডিরেক্টরিগুলি এড়িয়ে যায়:

find . -type f -exec du -h {} \; | sort -h

2

মধ্যে সমতুল্য BSDবা OSXহয়

$ du -ah simpl | sort -dr | head -6

0

এটি বিভিন্ন কারণে অবিশ্বাস্যভাবে কমনের প্রয়োজন (আমি একটি ডিরেক্টরিতে সাম্প্রতিকতম ব্যাকআপ সন্ধান করতে চাই), এবং এটি একটি আশ্চর্যজনক কাজ।

আমি একটি লিনাক্স সলিউশন সরবরাহ করতে যাচ্ছি যা অনুসন্ধানগুলি, জার্গস, স্ট্যাট, লেজ, জঞ্জাল, এবং সারণি ইউটিলিটিগুলি ব্যবহার করে।

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

আমি একটি পাইথন সমাধানও সরবরাহ করব যা আপনাকে উইন্ডোতেও এই কার্যকারিতাটি ব্যবহার করতে দেয় let

লিনাক্স কমান্ড লাইন সমাধান

ফাইলের আকার অনুসারে বাছাই করা ডিরেক্টরি থেকে কেবল ফাইলগুলির সম্পূর্ণ তালিকাকে পুনরাবৃত্তভাবে ফিরিয়ে দিন

find . -type f -print0 | xargs -0 -I{} stat -c '%s %n' {} | sort -n

আগের মত একই, তবে এবার সবচেয়ে বড় ফাইলটি ফিরিয়ে দিন।

# Each utility is split on a new line to help 
# visualize the concept of transforming our data in a stream
find . -type f -print0 | 
xargs -0 -I{} stat -c '%s %n' {} | 
sort -n | 
tail -n 1 |
awk '{print $2}'

ঠিক একই প্যাটার্ন, তবে এখন সবচেয়ে বড় পরিবর্তে নতুন ফাইলটি নির্বাচন করুন

# (Notice only the first argument of stat changed for new functionality!)
find . -type f -print0 | xargs -0 -I{} stat -c '%Y %n' {} | 
sort -n | tail -n 1 | awk '{print $2}'

ব্যাখ্যা:

  1. সন্ধান করুন: বর্তমান ডিরেক্টরি থেকে পুনরাবৃত্তভাবে সমস্ত ফাইল সন্ধান করে এবং এগুলি শূন্য চরিত্রের সাহায্যে মুদ্রণ করে
  2. xargs: স্ট্যান্ডার্ড ইনপুট থেকে সরবরাহিত আর্গুমেন্ট ব্যবহার করে কমান্ডগুলি কার্যকর করতে ইউটিলিটি। আউটপুট প্রতিটি লাইন জন্য, আমরা সেই ফাইলের স্ট্যাট ইউটিলিটি চালাতে চাই
  3. স্ট্যাটাস: স্ট্যাট হ'ল চারদিকে দুর্দান্ত কমান্ড যা ব্যবহারের অনেকগুলি ক্ষেত্রে রয়েছে। আমি দুটি কলাম মুদ্রণ করছি, প্রথম কলামটি হ'ল ব্লকের আকার (% s), এবং দ্বিতীয় কলামটি ফাইলের নাম (% n)
  4. বাছাই করুন: সংখ্যার সুইচ দিয়ে ফলাফলগুলি বাছাই করুন। যেহেতু প্রথম যুক্তি একটি পূর্ণসংখ্যা তাই আমাদের ফলাফলগুলি সঠিকভাবে বাছাই করা হবে
  5. লেজ: কেবলমাত্র আউটপুটের শেষ লাইনটি নির্বাচন করুন (যেহেতু তালিকাটি সাজানো হয়েছে, এটি বৃহত্তম ফাইল!)
  6. awk: দ্বিতীয় কলামটি নির্বাচন করুন, এতে ফাইলের নাম রয়েছে এবং এটি পুনরাবৃত্ত ডিরেক্টরিতে বৃহত্তম ফাইল।

পাইথন সমাধান

#!/usr/bin/env python
import os, sys
files = list()
for dirpath, dirname, filenames in os.walk(sys.argv[1]):
    for filename in filenames:
        realpath = os.path.join(dirpath, filename)
        files.append(realpath)
files_sorted_by_size = sorted(files, key = lambda x: os.stat(x).st_size)
largest_file = files_sorted_by_size[-1]
print(largest_file)

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



0

আরোহী ক্রমে আকারযুক্ত ফোল্ডারগুলি রাখতে বাছাই বিকল্প সহ কমান্ডের নীচে চেষ্টা করুন

du -sh * | sort -sh


-1

এআইএক্স এবং এইচপি-ইউএক্স ব্যতীত যে কোনও প্ল্যাটফর্মে কাজ করে এমন কিছু:

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