প্রতিটি ফাইলের প্রথম লাইনে পাঠ্য লিখুন


1

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

sed -i '1 i\/* Copyright 2013 Manolo Salsas  \nThis program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License, version 2, as published by the Free Software Foundation.\n\nThis program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License for more details.\n\nYou should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA*/ ' ./*

তবে এই আদেশটি পুনরাবৃত্ত হয় না, তাই আমার করা উচিত:

find ./* -type f | xargs sed -i '1 i\/* Copyright 2013 Manolo Salsas  \nThis program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License, version 2, as published by the Free Software Foundation.\n\nThis program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License for more details.\n\nYou should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA*/ '

এটি প্রতিটি ফাইলের প্রথম লাইনে সেই লাইনগুলি সন্নিবেশ করা উচিত (কোনও বিন্দু দিয়ে শুরু হওয়া লুকানোগুলি আশা করুন), তবে এটি কাজ করছে না।

আমি কী ভুল করছি?

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


কাজ মানে কি না ? আপনি যদি দ্বিতীয় কমান্ড কার্যকর করেন? প্রথম কমান্ডটি প্রত্যাশার মতো কাজ করে? আপনি কোন ওএস ব্যবহার করছেন?
ডেনিস

1
"প্রতিটি উত্স ফাইলে কেন লাইসেন্স নোটিশ দেওয়া উচিত" - এফএসএফ এফএকিউ দেখুন: gnu.org/license/gpl-faq.html#NoticeInSourceFile , এবং নিজেই জিপিএল লাইসেন্সে: "এগুলি সংযুক্ত করা সবচেয়ে নিরাপদ is প্রতিটি উত্স ফাইলের শুরুটি সবচেয়ে কার্যকরভাবে ওয়্যারেন্টি বাদ দেওয়ার কথা জানাতে "" (আপনার নতুন প্রোগ্রামগুলিতে এই শর্তাদি কীভাবে প্রয়োগ করবেন ", শেষের নিকটে)
অ্যাডওয়ার্ড

উত্তর:


4

আপনার সমাধান কাজ করে (আমার শেলটিতে অনুলিপি করে আটকানো হয়েছে) ব্যতীত এটি উপ-ডিরেক্টরিতে ডটফাইলগুলিও স্পর্শ করে। সেই স্পর্শ এড়ানোর জন্য, আপনি ডাকা প্রয়োজন findহিসাবে

find -type f \! -name '.*' | xargs sed -i '1 i\/* ... */'

( এবং -andধরে নেওয়া হয় )। নোট করুন যে আমার শেল (বাশ) এ পালাতে হবে ।-type f\! -name '.*'!

মনে রাখবেন যে ফাইলগুলি ফাঁকা থাকলে insertবিকল্পটি sedকাজ করে না। আপনি যদি বর্তমান ফোল্ডারের ফাইলগুলিতে কিছু পাঠ্য লিখেন তবে এটি কার্যকর হয়।

কনফিগারেশন ফাইলগুলি ছাড়াও আপনার ছবিতে লেখা এড়ানো উচিত। আমার অনুমান যে লেখার জন্য ফর্ম্যাটগুলি নির্দিষ্ট করা ভাল। এটার মতো কিছু:

find ./* -regex ".*\.\(php\|js\|txt\|html\|css\|yml\|twig\)" -type f | xargs sed -i '1 i\/* CCCopyright 2013 Manolo Salsas  [B\nThis program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License, version 2, as published by the Free Software Foundation.\n\nThis program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License for more details.\n\nYou should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA*/ '

হালনাগাদ:

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

ack -f --type=cc --type=perl | xargs sed -i '1 i\/* ... */'

( type=ccসি এর জন্য দাঁড়িয়েছে)


আমার জন্য কাজ করে না।
মনোলো

অন্য একটি সমস্যা আছে। যদি আপনার সেই ফোল্ডারে চিত্র থাকে তবে সেই চিত্রগুলি ভঙ্গ হবে। আপনার লেখার জন্য পছন্দসই ফর্ম্যাটগুলি অন্তর্ভুক্ত করা উচিত।
মানোলো

@ মানোলোসালাসাস দয়া করে প্রশ্নের উত্তরগুলি রাখবেন না। আপনার প্রতিটি লাইনে এই লাইনটি যুক্ত করা উচিত কিনা তা নির্ভর করে লাইসেন্সের প্রয়োজনীয়তার উপর। সাধারণত এটি প্রতিটি পাঠ্য-ভিত্তিক উত্স ফাইলে থাকা উচিত।
slhck

@ এসএলএইচসি - আপনাকে অনেক ধন্যবাদ আমি আমলে নেব।
মানোলো

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