তারিখের ক্রমে কোনও প্রদত্ত ডিরেক্টরিতে থাকা সমস্ত ফাইলকে আমি কীভাবে সংযুক্ত করতে পারি, যেখানে আমি শীর্ষে থাকা নতুন ফাইলটি চাই?


18

এবং নীচে সবচেয়ে পুরানো ফাইল সঙ্গে?

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

উত্তর:


33

আপনি যে ফাইলগুলি ব্যবহার করেন তা একত্রিত করতে

cat file1 file2 file3 ...

সময় অনুসারে বাছাই করা উদ্ধৃতিযুক্ত ফাইলের একটি তালিকা পেতে, প্রথমে আপনি ব্যবহার করুন

ls -t

সবগুলোকে একত্রে রাখ,

cat $(ls -t) > outputfile

আপনি কিছু যুক্তি দিতে চাইবেন ls(যেমন, *.html)।

তবে আপনার যদি ফাঁকা জায়গাগুলির ফাইল নাম থাকে তবে এটি কাজ করবে না। My file.htmlদুটি ফাইলের নাম হিসাবে ধরে নেওয়া হবে: Myএবং file.html। আপনি lsফাইলের নামগুলি উদ্ধৃতি তৈরি করতে পারেন এবং তারপরে xargsআর্গুমেন্টগুলি পাস করার জন্য, যারা উদ্ধৃতি বোঝে তা ব্যবহার করতে পারেন cat

ls -tQ | xargs cat

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


এটি আমার ডেবিয়ান সিস্টেমে কাজ করছে না ... আমাকে ব্যবহার করতে হবে cat $(ls -t) > outputfile, অন্যথায় catউদ্ধৃত ফাইলের নামগুলি প্রত্যাখ্যান করে
মাইক পেনিংটন

1
আমার ভুল. আমি সবসময় এই জিনিসগুলিতে ধরা পড়ি। আপডেট উত্তর দেখুন।
এঙ্গাস

ওহ - রিন্ডান্ট্যান্ট শিরোনামের দ্বারা আমি এমন জিনিস বলতে বুঝি যা সাধারণত কিছু হেডার.এফপি / ফুটার.এফপি ফাইলে রাখা হয় তবে এইচটিএমএল-তে সংরক্ষণ করার পরে পৃথকভাবে সংরক্ষণ করা হয় (এবং আপনি পিএইচপি পৃষ্ঠাগুলি ভর-ডাউনলোড করার পরে ফাইলের আকার বাড়িয়ে তুলতে পারেন)।
InquilineKea

cat $(ls -t)ফাইলের নাম সম্প্রসারণের ক্ষেত্রেও ঝুঁকিপূর্ণ। যদি একটি *, বা ?, বা বন্ধনী এক্সপ্রেশন (যেমন file-[old].html) সহ কোনও ফাইলের নাম থাকে ; এবং যদি ফাইলনামটি অন্য একটি ফাইলের নামের সাথে একটি প্যাটার্ন হিসাবে ব্যাখ্যা করা হয়; পদ্ধতির একটি ভুল তালিকা উত্পাদন করবে। set -fএই ঘাটতি সমাধান করবে।
বেয়ারফুট আইও

ls -Qআউটপুট উত্পাদন করতে পারে যা উপযুক্ত নয় xargs। উদাহরণস্বরূপ, "foo"হয়ে যায় "\"foo\"", তবে xargs ডাবল উদ্ধৃত স্ট্রিংয়ের মধ্যে পালিয়ে যাওয়া ডাবল উদ্ধৃতি বুঝতে পারে না।
বেয়ারফুট আইও

2

লিকক্সোগ্রাফিক ছাড়া অন্য ক্রমে ফাইল তালিকাভুক্ত করার সহজ উপায়টি হল zsh গ্লোব কোয়ালিফায়ার । Zsh ছাড়া, আপনি ব্যবহার করতে পারেন ls, কিন্তু আউটপুট পার্স lsবিপদ সঙ্গে পরিপূর্ণ

cat *(om)

আপনি যদি কিছু লাইন ফেলাতে চান তবে সেড বা অজক বা পার্ল ব্যবহার করুন। উদাহরণস্বরূপ, <head>প্রথম ফাইলটি থেকে নেওয়া এবং <body>অন্যান্য ফাইলগুলি থেকে অংশগুলি একত্রিত করে ধরে নেওয়া, যে প্রতিটি ফাইলের মধ্যে ট্যাগ <body>এবং </body>ট্যাগগুলি এক লাইনে রয়েছে:

{
  sed -e '/<\/body>/ q' *.html(om[2])
  sed -e '1,/<body>/ d' -e '/<\/body>/,$ d' *.html(om[3,-1])
  echo '</body>'
  echo '</html>'
} >concatenated.html

ব্যাখ্যা:

  • প্রথম, concatenated.htmlতৈরি করা হয়। এটি তাই সর্বকনিষ্ঠ *.htmlফাইল (ধরে নিলাম ভবিষ্যতে কোনও ফাইলেরই তারিখ নেই।
  • তারপরে দ্বিতীয়-কনিষ্ঠ *.htmlফাইল থেকে অনুলিপি করুন, তবে </body>লাইনে ছেড়ে দিন ।
  • তারপরে অন্যান্য ফাইলগুলি থেকে অনুলিপি করুন, তবে <body>লাইন থেকে শুরু করে </body>লাইনটি দিয়ে শুরু করুন everything
  • শেষ অবধি শেষ ট্যাগগুলি উত্পাদন করুন।

1

@Angus দ্বারা প্রদত্ত সমাধানটি ভাল তবে যদি ফোল্ডারে ডিরেক্টরি থাকে তবে এটি ঠিক করবে এটির সমস্যা রয়েছে।

cat $(ls -tpa | grep -v / )


ক্যাভ্যাট: অ্যাঙ্গাসের উত্তর সম্পর্কে আমার মন্তব্যে যেমন ব্যাখ্যা করা হয়েছে, এই উত্তরটিও পথের নাম প্রসারণের পক্ষে ঝুঁকিপূর্ণ।
বেয়ারফুট আইও

বিড়ালটির প্রস্থান স্থিতি পরীক্ষা না করা অবধি ডিরেক্টরি নির্দেশের যুক্তিটি অসম্পূর্ণ হওয়া উচিত। বিড়াল স্ট্যাডারকে কেবল একটি বার্তা প্রেরণ করবে এবং পরবর্তী যুক্তিতে এগিয়ে যাবে।
বেয়ারফুট আইও
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.