একটি ফাইল তালিকাযুক্ত ফাইল থেকে মোট ফাইলের আকার পান


14

আমার কাছে ফাইলগুলির একটি লিখিত ফাইল রয়েছে যা আমি মোট ফাইলের আকার জানতে চাই। এটি করার কোনও আদেশ আছে কি?

আমার ওএস একটি খুব বেসিক লিনাক্স (কিউএনপ টিএস -410)।

সম্পাদনা করুন:

ফাইল থেকে কয়েকটি লাইন:

/ শেয়ার / সংরক্ষণাগার / বেইলি পরীক্ষা / BD006 / 0.tga
/ শেয়ার / সংরক্ষণাগার / বেইলি / BD007 / 1 সংস্করণ 1.tga
/ শেয়ার / সংরক্ষণাগার / বেইলি 2 / BD007 / example.tga


আমাদের ফাইলের কয়েকটি উদাহরণ লাইন দিন।
EEAA

ফাইল থেকে উদাহরণ যোগ করা হয়েছে।
নিকোলাস

এটি কোনও ধরণের এনএএস, তাই না? আপনি কি ব্যস্তবক্স ইনস্টল করেছেন?
সিজেসি

হ্যাঁ এটিই এবং আমি মনে করি এটি ইতিমধ্যে ইনস্টলড, কেন?
নিকোলাস

উত্তর:


13

আমি বিশ্বাস করি এরকম কিছু ব্যস্তবক্সে কাজ করবে:

du `cat filelist.txt` | awk '{i+=$1} END {print i}'

আমার মতো আপনার মতো পরিবেশ নেই তবে আপনি যদি ফাইলের নামগুলির ফাঁকে ফাঁকে সমস্যা নিয়ে থাকেন তবে এরকম কিছু খুব কার্যকর হবে:

cat filelist.txt | while read file;do
  du "$file"
done | awk '{i+=$1} END {print i}'

সম্পাদনা 1 :
@ নীচে তার পোস্টে ঠিক ডান, ডু ডিস্কের ব্যবহার দেখায় এবং সঠিক ফাইলাইজ করে না। আচরণটি পরিবর্তন করতে ব্যস্তবক্সে -a পতাকা ব্যবহার করে, তাই চেষ্টা করুন: du -a "$file"সঠিক ফাইলাইজের জন্য এবং আউটপুট / আচরণের তুলনা করুন।


1
আপনার ইনপুট জন্য ধন্যবাদ, প্রথম কমান্ড ফিরে আসে /usr/bin/du: Argument list too long(আমার ফাইলের প্রায় 80,000 লাইন)। আমি দ্বিতীয় প্রবেশ করার পরে আপনি দ্বিতীয় কমান্ড আমাকে কেবল একটি প্রম্পট দেয়, আরও কিছুর জন্য অপেক্ষা করছেন?
নিকোলাস

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

যখন আমি নিম্নলিখিতগুলি করি এটি একটি "ইনপুট প্রম্পট" cat tgafiles.txt | while read file;do du "$file" done | awk '{i+=$1} END {print i}'। ধন্যবাদ ম্যাটিয়াস
নিকোলাস

1
আহ! যদি আপনি সমস্ত কিছু এক লাইনে রাখেন তবে আপনার আরেকটি প্রয়োজন; এটি পছন্দ: cat tgafiles.txt | while read file;do du "$file";done | awk '{i+=$1} END {print i}'(অর্থাত্ সম্পন্ন হওয়ার আগে)।
ম্যাটিয়াস আহনবার্গ

চিহ্নিত করা! এটি পুরোপুরি কাজ করেছে, চিয়ার্স! (যদিও আমি নিজেই এই ভুলটি বুঝতে পেরেছিলাম)
নিকোলাস

8
du -c `cat filelist.txt` | tail -1 | cut -f 1

-cলাইন "মোট আকার" যুক্ত করে;
tail -1সর্বশেষ রেখা লাগে (মোট আকার সহ);
cut -f 1"মোট" শব্দটি কেটে দেয়।


এটি du - যুক্তির তালিকার সাথে ব্যর্থ। আমার ফাইললিস্টটি বড়। Xargs সহ নীচের উত্তরটি সবচেয়ে সহজ সমাধান বলে মনে হচ্ছে।
সাইক্লোন 0044

4

আপনার লিনাক্স সরঞ্জামগুলি এতে সক্ষম কিনা তা আমি জানি না তবে:

cat /tmp/filelist.txt  |xargs -d \\n du -c

কর, এক্সার্গস ডিলিমিটারটিকে একটি নতুন লাইন চরিত্র হিসাবে সেট করবে এবং ডু আপনার জন্য একটি দুর্দান্ত মোট উত্পাদন করবে।

এ খুঁজছি http://busybox.net/downloads/BusyBox.html মনে হয় যে ", busybox ডু" সর্বোমোট বিকল্প সমর্থন করবে কিন্তু ", busybox xargs" না করবে সমর্থন কাস্টম বিভেদক।

আবার, আমি আপনার সরঞ্জামসেট সম্পর্কে নিশ্চিত নই।


এখানে ফলাফল:xargs: invalid option -- d
নিকোলাস

আশ্চর্যজনক: কোনও এনএএসের ব্যস্তবক্স লিনাক্সের সাথে কাজ করা ম্যাকগুইভার পর্বের মতো, কিছু ক্যানভাস, লাঠি এবং সুতা থেকে একটি কার্যকরী বিমান তৈরির চেষ্টা করে।
সিজেসি

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

1
আমি মনে করি উত্তরটি সবচেয়ে ভাল। এটি সংক্ষিপ্ত এবং এই থ্রেডের অন্যান্য উত্তরের তুলনায় খুব দ্রুত।
জিমহান

ভাল উত্তর. আপনি বেরিয়ে যেতে চাইতে পারেন -cযেহেতু xargs একাধিক কল করতে পারে duযদি ফাইললিস্টটি যথেষ্ট দীর্ঘ হয়, বেশ কয়েকটি duমোট পরিমাণ উত্পাদন করে ।
qwr

4
while read filename ;  do stat -c '%s' $filename ; done < filelist.txt | awk '{total+=$1} END {print total}'

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


ফাইলসাইজ বনাম ডিস্কসাইজ সম্পর্কে ভাল মন্তব্য!
ম্যাটিয়াস অহনবার্গ

সত্যিই খুব আকর্ষণীয় মন্তব্য, দুর্ভাগ্যক্রমে আমার লিনাক্স statআদেশটি জানে না :stat: command not found
নিকোলাস

আপনাকে "ব্যস্তবক্স স্ট্যাট" বলতে হতে পারে।
সিজেসি

এটি stat: applet not foundএই ক্ষেত্রে বলেছে
নিকোলাস

4

সমস্যার আরেকটি সমাধান এখানে দেওয়া হল:

cat filelist.txt | tr '\n' '\0' | wc -c --files0-from=-

আমার জন্য (সাইগউইনে) du -bcঅনেক দ্রুত দৌড়ায় ।
qwr

2

এরকম কিছু চেষ্টা করুন:

$ cat filelist.txt | xargs ls -l | awk '{x+=$5} END {print "total bytes: " x}' 

পাথের জায়গাগুলির সাথে সঠিকভাবে মোকাবেলা করতে:

$ find /path/to/files -type f -print0 | xargs -0 ls -l | awk '{x+=$5} END {print "total bytes: " x}' 

আপনার ইনপুটটির জন্য ধন্যবাদ, দুর্ভাগ্যক্রমে আমি মনে করি যে আমার ফাইলে থাকা ডিরেক্টরিগুলির ফাঁকা জায়গাগুলিতে একটি "\" দিয়ে পালানো হচ্ছে না। তাই ফাইল তালিকার মধ্য দিয়ে যাওয়ার সময় এটি ভেঙে যায়।
নিকোলাস

আপনি কি টেক্সট ফাইলের তালিকাটি বাইপাস করতে পারবেন এবং কেবলমাত্র এটির আউটপুটটি তৈরি করতে পারেন find?
EEAA

দুর্ভাগ্যক্রমে তালিকাটি দীর্ঘ; আমি কি ফলাফলের এড়ানোর বিষয়ে যুক্তি যুক্ত করতে পারি?
নিকোলাস

আমার লিনাক্স সিস্টেমে সন্ধানের সাথে "-প্রিন্ট0" তর্ক নেই
নিকোলাস

@ নিকোলাস - findএটি আসল findবাইনারিটির পরিবর্তে ব্যস্তবক্সের স্ট্রিপড ডাউন ব্যবহার করার কারণে ।
EEAA

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