ডিরেক্টরি তালিকাতে ফাইল আকারের সমষ্টি দেখান


71

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

বর্তমানে, আমি alias dir='ls -FaGl'আমার আছে .bash_profile, দেখাচ্ছে

drwxr-x---+  24 mattdmo  4096 Mar 14 16:35 ./
drwxr-x--x. 256 root    12288 Apr  8 21:29 ../
-rw-------    1 mattdmo 13795 Apr  4 17:52 .bash_history
-rw-r--r--    1 mattdmo    18 May 10  2012 .bash_logout
-rw-r--r--    1 mattdmo   395 Dec  9 17:33 .bash_profile
-rw-r--r--    1 mattdmo   176 May 10  2012 .bash_profile~
-rw-r--r--    1 mattdmo   411 Dec  9 17:33 .bashrc
-rw-r--r--    1 mattdmo   124 May 10  2012 .bashrc~
drwx------    2 mattdmo  4096 Mar 24 20:03 bin/
drwxrwxr-x    2 mattdmo  4096 Mar 11 16:29 download/

উদাহরণ স্বরূপ. এই প্রশ্ন থেকে উত্তর গ্রহণ :

dir | awk '{ total += $4 }; END { print total }'

যা আমাকে মোট দেয়, কিন্তু ডিরেক্টরি তালিকা নিজেই মুদ্রণ করে না। ওয়ান-লাইনার বা শেল স্ক্রিপ্টে এটি পরিবর্তন করার কোনও উপায় আছে যাতে আমি যে কোনও lsআর্গুমেন্ট পাস করতে চাই dirএবং একটি সম্পূর্ণ তালিকা যোগের যোগফল পেতে পারি? উদাহরণস্বরূপ, আমি dir -R *.jpg *.tifসমস্ত সাব ডিরেক্টরিতে এই ফাইল ধরণের তালিকা এবং মোট আকার পেতে দৌড়াতে চাই । আদর্শভাবে, আমি যদি প্রতিটি উপ-ডিরেক্টরিটির আকার পেতে পারি তবে এটি দুর্দান্ত হবে তবে এটি অত্যাবশ্যক নয়।


5
কেন ls -lhআপনাকে সাহায্য করে না? এটি শীর্ষে মোট সমষ্টি প্রিন্ট করে। আপনি du -sh *.exeমানব পাঠযোগ্য আকারে ডিস্ক স্থান ব্যবহারের তথ্য পেতে চালাতে পারেন ।
বাগবধর

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

নীচের আমার উত্তরটি আপনার পক্ষে কাজ করে কিনা তা দেখুন
বাগাবাদর

1
ls -lhএটির বিষয়বস্তু গণনা করে একটি
দিরের

উত্তর:


25

নিম্নলিখিত ফাংশনটি আপনি যা চেয়েছেন তার বেশিরভাগ ক্ষেত্রে:

dir () { ls -FaGl "${@}" | awk '{ total += $4; print }; END { print total }'; }

... তবে আপনি যা চাইছেন তা আপনাকে দেয় dir -R *.jpg *.tifনা, কারণ এটি কীভাবে ls -Rকাজ করে না । আপনি findএটির জন্য ইউটিলিটিটি নিয়ে খেলতে চাইতে পারেন ।


1
এটি সত্য, যদি আপনি প্রতিটি ফাইলের বিষয়বস্তু আকারের জন্য সন্ধান করেন তবে ফাইলটি ডিস্কে যে পরিমাণ আকার নেয় তা নয়। এই পার্থক্যটি খুব ছোট ফাইলগুলির জন্য আরও স্পষ্ট। আমার ডিসট্রোর প্রতিটি ফাইলের জন্য 4 কেবি খণ্ডে ডিস্কে স্থান বরাদ্দ করা হয় (সুতরাং একটি 300 বাইট ফাইল ডু কমান্ডের দ্বারা রিপোর্টিত হিসাবে এখনও একটি ডিস্কে 4K ব্যবহার করে)। প্রদত্ত ওপি "প্রতিটি ফাইল কতটা জায়গা নেয়" এটি সন্ধান করছে, তারপরে ডু এটি করার উপায়।
জন ভি

1
dirইতিমধ্যে একটি জনপ্রিয় জিএনইউ কোর্টিলের নাম, আমি বরং এর মতো কোনও ক্রিয়াকলাপের নাম রাখব না।
মিষ্টান্ন

দয়া করে ঠিক করুন যাতে এটি লিনাক্স এবং ওএস-এস উভয় এবং আপনার "-a" অন্তর্ভুক্ত "এ কাজ করে।" এবং "..", যা ভাল নয়:) এখানে স্থির কমান্ডটি রয়েছে: dir () {ls -Fl "$ {@}" | awk '{মোট + = $ 5; ছাপা }; END {মুদ্রণ "মোট:" মোট} '; }
দিমিত্রি শেভকপলিয়াস

148

এর জন্য ইতিমধ্যে একটি ইউএনআইএক্স কমান্ড রয়েছে: du

শুধু কর:

du -ach 

কনভেনশন অনুসারে আপনি কমান্ডের শেষে এক বা একাধিক ফাইল বা ডিরেক্টরি পাথ যুক্ত করতে পারেন। -hআকারটিকে মানব-বান্ধব বিন্যাসে রূপান্তর করার জন্য একটি এক্সটেনশন -aযা আপনাকে "আপাত" আকার দেয় (ডিস্ক ব্যবহারের পরিবর্তে ফাইল আকার) -cদেয় এবং শেষে মোট দেয়।


12
হ্যাঁ, ডু ভাল কাজ করে। আপনি তালিকার শেষে মোট পেতে -c বিকল্পটি (--totot সমান) ব্যবহার করতে পারেন।
মাইকিব

6
নোট যা duফাইলের আকারের সমষ্টি নয়, ডিস্ক ব্যবহার দেয়।
স্টাফেন চেজেলাস

7
du -hএতে পাস করা ফাইলগুলির আকারের যোগফল দেয় না। du -h *.soপ্রতিটি ফাইলের আকার দেখায়, তবে যোগফল দেয় না। আমি মনে করি আপনি এখানে যা চান তা du -hc *.so(বা এমনকি du -hc *.so | tail -1) even তবে অবশ্যই, তিনি ডিরেক্টরি তালিকাও চান।
সীমাবদ্ধ প্রায়শ্চিত্ত

1
এই কমান্ডটি কেবলমাত্র ফাইলের সংক্ষিপ্ত তালিকা সহ কাজ করে। আপনার ডিরেক্টরিতে 850000 ফাইল থাকলে কী ঘটে দেখুন দেখুন !!!
হামিদ এফজেএম

3
! -aমানে --all। বরং ব্যবহারের কথা বিবেচনা করুন--apparent-size
আর্নল্ড ভিএম


8

আপনি মোট সংক্ষিপ্ত পরিমাণটি বর্তমান লাইনে মুদ্রণ করুন:

dir | awk '{ print; total += $4 }; END { print "total size: ",total }'

6

পার্ল সহ:

perl -le 'map { $sum += -s } @ARGV; print $sum' -- *.pdf

বর্তমান ডিরেক্টরিতে থাকা সমস্ত অ-লুকানো পিডিএফ ফাইলের আকার।


1

.বাশ_প্রোফাইলে বা .বাশার্কে নিম্নলিখিতগুলি যুক্ত করা আমার পক্ষে কাজ করে।

dir ()
{
find . -iname "$@" -exec ls -lh {} \;
find . -iname "$@" -print0|xargs -r0 du -csh|tail -n 1;
}

এখন যখন আমি একটি দির *। এমপি 3 করি তখন এটি পুনরাবৃত্ত হয় এবং শেষে মুদ্রণ করে। আপনি সন্ধানে একটি সর্বোচ্চ পরামিতি যুক্ত করে আপনি কত গভীরতা চান তা নিয়ন্ত্রণ করতে পারেন। আমি জানি দুবার অনুসন্ধান চালানো খুব কার্যকর ধারণা নয়। তবে আমি আরও ভাল উপায় সম্পর্কে চিন্তা করতে পারি না। কমপক্ষে এটি কাজটি সম্পন্ন করে।


1

উপরে উল্লিখিত বর্ণনার মতো du এবং একটি বিশ্রী বিবৃতি ব্যবহার করে আপনি যা খুঁজছেন তা সরবরাহ করবে।

উদাহরণ: du /home/abc/Downloads/*.jpg | awk '{ print; total += $1 }; END { print "total size: ",total }'

এটি .jpg এ শেষ হওয়া ব্যবহারকারীদের abc এর ফোল্ডারে সমস্ত ফাইল তালিকাভুক্ত করবে এবং তালিকা শেষে এই সমস্ত ফাইলের সমষ্টি মুদ্রণ করবে।


0

ডিয়ার আউটপুট এবং আকারের গণনা উভয়ই পেতে অন্য প্রস্তাবিত বিকল্পগুলির কোনও ব্যবহার না করেই আপনি টি (1) ব্যবহার করতে পারেন এবং বিকল্প প্রতিস্থাপন করতে পারেন ...

dir | tee >( awk '{ total += $4 }; END { print total }' )

দরকার নেই tee, কেবলdir | awk '{print; total += $4}; END {print total}'
স্টাফেন চ্যাজেলাস

0
du path_to_your_files/*.jpg | awk '{ total += $1 }; END { print total }'

3
না। প্রথম, কেবল একটি আদেশ দেওয়া কোনও উত্তর নয়। দ্বিতীয়ত, আপনি যদি পুরো প্রশ্নটি, অন্যান্য উত্তরগুলি এবং আমার মন্তব্যগুলি পড়তে উদ্বিগ্ন হন, তবে আপনি দেখতে পেয়েছেন যে এটি আমি চাই না।
ম্যাটডিমো 26'15

পোস্টারের সাথে ফর্সা হওয়ার জন্য, এটি গুগল অনুসন্ধানের জন্য প্রথম অনুসন্ধান ফলাফল linux sum human readable sizesএবং আমি যা খুঁজছি।
শ্রীধর সারনোবাত

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