আমি কীভাবে একটি ফাইল "বিড়াল এবং অনুসরণ" করব?


31

একটি ফাইল ক্রমানুসারে ডাউনলোড করা হচ্ছে wget

যদি আমি এটি দিয়ে cat myfile.tar.bz2 | tar -xjআনপ্যাক করা শুরু করি তবে এটি কী দ্রুত তা নির্ভর করে সঠিকভাবে আনপ্যাক করতে পারে বা "অপ্রত্যাশিত ইওএফ" দিয়ে ব্যর্থ হতে পারে।

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


আমি @ এরিয়েলকো এর উত্তরের উপর ভিত্তি করে একটি স্ক্রিপ্ট ক্যাট_এন্ড_ফলো তৈরি করেছি যা ফাইলটি আর লেখার জন্য খোলা হচ্ছে না তখন তাও বন্ধ করে দেয় ।tail


2
আমি মনে করি আপনি tailকমান্ডটি এর অনুসরণ বিকল্পের সাথে সন্ধান করছেন।
কেশলাম

tailবাইনারি ফাইলের পাশাপাশি কাজ করে?
vi।

2
আপনিও পছন্দ করতে পারেন less +F...
মাইকজার্জ

আমি জানি আপনি আপনার সমাধানটি পেয়েছেন, তবে আমার একটি প্রশ্ন রয়েছে, কেন কেবল তা করা যায় না:wget ... && tar xjvf ...
জোসেফ আর

@ জোসেফআর।, ১. সমান্তরাল করে সময় বাঁচানোর জন্য; ২. এমনকি সিস্টেমের লোড আপ করতে (সম্পদ-নিবিড় পূর্ণ থ্রোটল আনপ্যাকিং পর্ব এড়ানো / কমিয়ে দেওয়া); ৩. "আনপ্যাক" কমান্ডটি পরে মনে রাখা (বা এটি নির্ধারিত) বা চেইন কমান্ড প্রথম স্থানে টাইপ করা (যখন আমি এখনও নিশ্চিত না যে আমি এটি আনপ্যাক করতে চাই)।
vi।

উত্তর:


22
tail +1f file

এটি wgetডাউনলোড করার সময় আমি লিবরেফিস উত্স টারবাল দিয়ে এটি উবুন্টুতে পরীক্ষা করেছি:

tail +1f libreoffice-4.2.5.2.tar.xz | tar -tvJf -

এটি আমার অ্যান্ড্রয়েড ফোনে সোলারিস 10, আরএইচইল 3, এআইএক্স 5 এবং ব্যাসিবক্স 1.22.২০ তে (বুসিবক্স tail +1 -f fileসহ ব্যবহার করুন ) কাজ করে।


1
ডাউনলোড শেষ হয়ে গেলে এটি স্বয়ংক্রিয়ভাবে প্রস্থান করবে? আমি প্রত্যাশা করি যে "অনুগামী" /proc/*/fd/পর্যায়ক্রমে স্ক্যান করে এবং ফাইলটি ভালের জন্য বন্ধ রয়েছে কিনা তা যাচাই করবে।
vi।

2
আমি আশা করি না যে tailবাইন্রে ফাইলগুলির সাথে কাজ করে ...
vi।

একটি স্ক্রিপ্ট তৈরি করেছে যা স্ক্যানিং / প্রোপ /.. / ডিফডি এবং স্বয়ংক্রিয়ভাবে সমাপ্তি করে।
vi।

1
আপনার জিএনইউ লেজের দরকার নেই, আমি বিশ্বাস করি -fবিকল্পটি প্রমিত। তবে ডাউনলোড শেষ হয়ে গেলে এটি স্বয়ংক্রিয়ভাবে শেষ হবে না।
বর্মার

4
উবুন্টু tail +1fকাজ করে না। আপনাকে করতে হবেtail -n +1
ড্যাংনফেষ্ট

11

সমস্যাটি হ'ল catফাইলটি এখনও সংযোজন করা হচ্ছে তা অবগত নয়। যত তাড়াতাড়ি catসম্মুখ (বর্তমান) ফাইল এটা প্রস্থান করে শেষে।

wgetএটি এড়াতে আপনাকে কোনও পাইপে (বা ফিফো) লিখিত করতে হবে ।

wget -O - http://... | tar -xjf -

7
বা curl, যা ডিফল্টরূপে stdout আউটপুট। এবং (1) -f -অপ্রয়োজনীয়, tarডিফল্টরূপে স্টিডিন থেকে পড়ে এবং (2) বেশিরভাগই tarসংক্ষেপে স্বয়ংক্রিয়ভাবে সনাক্ত করতে পারে, তাই এটি jপ্রায়শই অযৌক্তিক। curl http://... | tar x
কেভিন

2
আনপ্যাক করা ফাইলটি সংরক্ষণ না করে এটি ডাউনলোড করবে। খারাপ নেটওয়ার্কের ক্ষেত্রে এটি ডাউনলোড চালিয়ে যেতে বাধা সৃষ্টি করবে।
vi।

3
@Vi। আপনি এটির teeমতো ব্যবহার করে ফাইলটি সংরক্ষণ করতে পারেন : curl http://… | tee ….tbz | tar -xjতবে ডাউনলোডটি আবার শুরু করা ঠিক একই কমান্ডটি পুনরায় চাওয়ার চেয়ে আরও জটিল হয়ে ওঠে।
কাস্পার্ড

5

থেকে প্রথম থেকে বাধা দেওয়া পর্যন্ত একটি ফাইল পড়তে এবং অনুসরণ :

tail -fn +1 file

এটি প্রদর্শনের জন্য, এটি চেষ্টা করুন (জিএনইউ কোরেটিলসের সাথে বাশ ধরে):

(while true; do printf . >> /tmp/file; sleep 1; done)&
tail -fn +1 /tmp/file  # (Ctrl-C to interrupt, of course, or otherwise kill it.)
kill %  # Kills the while-loop.

(দ্রষ্টব্য: +1f অন্যদের উল্লিখিত ফাইলগুলির নাম অন্তত জিএনইউ tailকমান্ডে ব্যাখ্যা করা হয়েছে ))

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

printf file1 > /tmp/file1; printf file2 > /tmp/file2
(while true; do printf . | tee -a /tmp/file{1,2} > /dev/null; sleep 1; done)&
cat /tmp/file1 <(tail -fn +1 /tmp/file2)  # (Interrupt or kill it.)
kill %  # Kills the while-loop.

এটি আমার পক্ষে কাজ করার সময় tail +1f fileহয়নি।
therealfarfetchd

এই উত্তরটি tail +1fঅন্যান্য বিকল্পগুলির সাথে যেমন--pid
জোসেফ কে স্ট্রাউস
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.