WC মোট মুছে ফেলার আগে ব্যবহার করে


2

আমি সমস্ত .di ফাইল খুঁজে পেতে সব সাবডিরেক্টরি এবং বর্তমান ডিরেক্টরি অনুসন্ধানের জন্য ব্যবহার করছি, এবং তারপর লাইন সংখ্যা খুঁজে পেতে wc -l চালান। যাইহোক, যখন আমি wc এর সাথে ব্যবহার করি, তখন মোট ক্ষেত্রটি বন্ধ থাকে, যখন আমি নিজে নিজে wc চালাও। কেউ কি জানো এটা কেন হচ্ছে?

find . -name \*.py -exec wc -l {} \;
  187 ./check.py
   43 ./file.py
   33 ./mitch.py
       ...
 1014 ./serve.py
   41 ./test_scripts/line_graph.py
   39 ./welcome.py

কিন্তু মোট, কিন্তু যখন আমি রান wc -l *.py একটি ডিরেক্টরির মধ্যে আমি মোট পেতে:

wc -l *.py
 187 check.py
  43 file.py
  94 log_com.py
 154 log_results.py
  33 mitch.py
1014 serve.py
  39 welcome.py
1564 total

উত্তর:


1

wc শুধুমাত্র আউটপুট একটি মোট মান যখন এটি একাধিক ফাইলের সাথে আর্গুমেন্ট হিসাবে বলা হয়।

থেকে জিএনইউ ম্যানুয়াল :

যদি একাধিক ফাইল দেওয়া হয়, wc ফাইল নামের সাথে ক্রম সংখ্যার ধারণকারী একটি চূড়ান্ত লাইন মুদ্রণ করে total

আপনার ক্ষেত্রে, আপনি একটি পেতে পারেন না মোট আউটপুট, আপনি আহ্বান করা হয় wc একবার প্রতিটি ফাইল পাওয়া যায়, তাই প্রতি পরবর্তী wc কল পূর্ববর্তী এক সম্পর্কে জানি না।


আপনি এখনও মোট গণনা চান, আপনি ব্যবহার করতে পারেন globstar বাশে অপশন ডিরেক্টরি এবং তালিকা মধ্যে recurse .py নথি পত্র:

shopt -s globstar
wc -l **/*.py

অথবা, GRAU হিসাবে, GNU সঙ্গে প্রস্তাব find এর -exec command {} + বিকল্প, আছে find সব পাওয়া পাথ বিকল্প {}, আলাদা আলাদাভাবে কল করার পরিবর্তে (যদিও গ্লোবাল পদ্ধতির সাথে এটির মতো ফাইলগুলির সংখ্যা সীমাবদ্ধ রয়েছে)।


আহা যে জ্ঞান করে তোলে। তাই আমি পরিবর্তে এই কাজ সম্পর্কে যেতে হবে?
taronish4

আমার পোস্ট আপডেট। সবচেয়ে বুলেট-প্রমাণ উপায় ব্যবহার করা হবে awk - গরু এর উত্তর দেখুন।
slhck

1

এমন কিছু নেই total ক্ষেত্র কারণ শুধুমাত্র একটি ফাইল আছে।

সঙ্গে -exec হুকুম {}; কর্ম, find রান হুকুম একবার প্রতিটি ফাইলের জন্য , শুধুমাত্র একটি একক যুক্তি প্রতিটি সময় যুক্ত। তাই প্রতিটি যে কিছুই নেই wc আহরণ মোট থেকে গণনা করতে পারে।

আপনি ব্যবহার করতে হবে -exec হুকুম {} + যদি আপনি GNU আছে find; অন্যথায় আপনি ফাইল তালিকা পাইপ করতে হবে xargs হুকুম

(এই উত্তর আমি স্বাভাবিক সঙ্গে বিরক্ত করতে যাচ্ছি না -print0 পরামর্শ, কারন যদি আপনার GNU না থাকে তবে আপনার কাছে এটি নেই -print0 অথবা এমনকি GNU xargs হয়। তবে, যদি আপনার xargs সংস্করণ না সমর্থন -d '\n', যে ব্যবহার করুন, কারণ ডিফল্ট উপায় xargs পার্স ইনপুট খুব নিরাপদ নয়।)

মনে রাখবেন যে এটি এখনও একাধিক হতে পারে wc invocations, কারণ বেশিরভাগ অপারেটিং সিস্টেম (সম্ভবত হার্ড ছাড়া) সর্বাধিক কমান্ড-লাইন দৈর্ঘ্য এবং / অথবা একক কমান্ডের সর্বোচ্চ সংখ্যক আর্গুমেন্টের সীমা আছে, যা বড় সংখ্যক ফাইল অতিক্রম করতে পারে। @ slhck এর ব্যবহার করার পরামর্শ **/*.py একই সীমাটিও আঘাত করবে (প্রাথমিকভাবে ইউনিক্সগুলিতে খুব কম সীমা ছিল কেন xargs প্রথম স্থানে তৈরি করা হয়েছিল)।

অন্য বিকল্প ব্যবহার করা হয় awk চূড়ান্ত গণনার জন্য:

find ... | awk '$2 != "total" {sum += $1; print}
                END {printf "%7d total\n", sum}'

কৌতূহল আউট, আপনি ইতিমধ্যে অনুশীলন অনুশীলন সীমা? (অবশ্যই আমি এটা নির্বিশেষে উল্লেখ করা উচিত মনে হয়।)
slhck

@ স্লেকঃ একবার - প্যাকম্যানের ডাউনলোড করা প্যাকেজ ক্যাশে থেকে সবকিছু সরাতে চেষ্টা করার সময়। (আমি ভুলভাবে কমান্ডের একটি সম্পূর্ণ পথ ব্যবহার করেছি, যাতে প্রতিটি পথের দৈর্ঘ্য দ্বিগুণ হয়।) আমি ব্যবহার করতে পেরেছি find -delete একটি বিকল্প হিসাবে rm -rf * তখন থেকে.
grawity
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.