লিনাক্স ফাইন্ড কমান্ড ব্যবহার করে ফাইল নামের পরিবর্তে আমি কীভাবে সামগ্রী মুদ্রণ করতে পারি?


10

আমার কাছে কয়েক হাজার আনল ফাইল রয়েছে এর মতো কিছু রয়েছে cbs_cdr_vou_20180624_603_126_239457.unl। নিম্নলিখিত কমান্ডটি ব্যবহার করে আমি এই ফাইলগুলি থেকে সমস্ত লাইন মুদ্রণ করতে চেয়েছিলাম। তবে এটি আমাকে কেবল ফাইলের নাম দিচ্ছে। আমার ফাইলের নাম দরকার নেই, আমার কেবল সেই ফাইলগুলির সামগ্রী দরকার।

find -type f -name 'cbs_cdr_vou_20180615*.unl'  > /home/fifa/cbs/test.txt

বর্তমান আউটপুট:

./cbs_cdr_vou_20180615_603_129_152023.unl
./cbs_cdr_vou_20180615_603_128_219001.unl
./cbs_cdr_vou_20180615_602_113_215712.unl
./cbs_cdr_vou_20180615_602_120_160466.unl
./cbs_cdr_vou_20180615_603_125_174428.unl
./cbs_cdr_vou_20180615_601_101_152369.unl
./cbs_cdr_vou_20180615_603_133_193306.unl

প্রত্যাশিত আউটপুট:

8801865252020|200200|20180613100325|;
8801837463298|200200|20180613111209|;
8801845136955|200200|20180613133708|;
8801845205889|200200|20180613141140|;
8801837612072|200200|20180613141525|;
8801877103875|200200|20180613183008|;
8801877167964|200200|20180613191607|;
8801845437651|200200|20180613200415|;
8801845437651|200200|20180613221625|;
8801839460670|200200|20180613235936|;

দয়া করে নোট করুন, ক্যাট কমান্ডের জন্য আমি ত্রুটি পাচ্ছি -bash: /bin/logger: Argument list too longকারণ কমান্ডের findপরিবর্তে ব্যবহার করতে চেয়েছিল cat


আপনার এখনও ব্যবহার করা দরকার cat
Ignacio Vazquez-Abram

হ্যাঁ! দয়া করে আমাকে বলতে পারেন আমি কীভাবে এটি করতে পারি? @ IgnacioVazquez-Abram
রেজুয়ান

উত্তর:


28

findউপযোগ pathnames নিয়ে কাজ করে। যদি findসন্ধান করা পথের নামগুলির জন্য কমান্ডটিতে কোনও নির্দিষ্ট ক্রিয়া উল্লেখ করা না থাকে তবে তাদের আউটপুট দেওয়ার জন্য ডিফল্ট ক্রিয়া হয়।

কমান্ডটি catযোগ করে -execআপনি সন্ধানকারী পথের নামগুলি, যেমন দৌড়াতে কোনও ক্রিয়া সম্পাদন করতে পারেন find:

find . -type f -name 'cbs_cdr_vou_20180615*.unl' -exec cat {} + >/home/fifa/cbs/test.txt

এটি বর্তমান ডিরেক্টরিতে বা এর অধীনে সমস্ত নিয়মিত ফাইলগুলি খুঁজে পেতে পারে, যাদের নাম প্রদত্ত প্যাটার্নের সাথে মেলে। এগুলির বৃহত্তর ব্যাচগুলির catজন্য, ফাইলগুলির বিষয়বস্তু একত্রীকরণের জন্য ডাকা হবে।

আউটপুট যেতে হবে /home/fifa/cbs/test.txt

সম্পর্কিত:


1
প্রত্যাশিত এবং কার্যকর করার সময় হিসাবে কাজ করা খুব দ্রুত যা সত্যই দুর্দান্ত। অনেক ধন্যবাদ.
রেজুয়ান

12

সম্পর্কিত findফলাফলের ফলাফলের ফলাফল হবে names
আপনি |আউটপুটটি পাইপ করতে পারেন xargs catযা catপ্রতিটি ফাইলের কমান্ড সম্পাদন করবে ।

উদাহরণ:

find -type f -name 'cbs_cdr_vou_20180615*.unl' | xargs cat  > /home/fifa/cbs/test.txt

আরেকটি বিকল্প ব্যবহার করা হবে -exec cat

find -type f -name 'cbs_cdr_vou_20180615*.unl'  -exec cat {} \;  > /home/fifa/cbs/test.txt

4
আপনার উভয় আদেশই ঠিকঠাক কাজ করছে। তবে কুসালানন্দের আদেশের চেয়ে কিছুটা ধীর । আমার ধারণা, মৃত্যুদন্ড কার্যকর করার সময় -exec cat {} \;এবং পরিবর্তিত হয় -exec -cat {} +। যাইহোক, ধন্যবাদ প্রচুর ইয়ারন
রেজুয়ান

xargs পাওয়া পাথরনামগুলির ফাঁকা স্থানগুলিতে ঝুঁকিপূর্ণ; -প্রসূত বিড়াল {} নয়
jez

2
find -print0 | xargs -0স্পেস / কোট / ইত্যাদির পক্ষে ঝুঁকিপূর্ণ নয়।
ফ্লফি

1
@ রিজুয়ান: -exec cat {} \;প্রতিটি ফাইলের জন্য xargs এর মতো একসাথে ব্যাচের পরিবর্তে বিড়ালটিকে পৃথকভাবে চালায় runs এটি ব্যবহার করবেন না যদি না আপনি স্পষ্টভাবে (যেমন কমান্ড যে শুধুমাত্র একটি সময়ে এক ফাইলের জন্য কাজ করে) চান, অথবা যদি আপনি ছাড়া একটি সিস্টেমের সাথে বহনযোগ্যতা প্রয়োজন -exec ... +ছাড়া -print0/ xargs -0। আমি কিছুটা অবাক হয়েছি যদিও এর find|xargsতুলনায় পরিমাপযোগ্য ধীর -exec cat {} +। আপনার কাছে মোট কয়েকটি ফাইল রয়েছে, সুতরাং স্টার্টআপ ওভারহেডে অনেক ব্যয় হয়? বা xargsআপনার ডিস্ক ক্যাশে ঠান্ডা থাকাকালীন আপনি কেবল সংস্করণটি দিয়েছিলেন?
পিটার কর্ডেস

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