सभी फ़ाइलों को लूप करें और फ़ाइल हेडर डालें


2

मान लें कि मेरे पास यह डमी परियोजना है:

$tree -L 3 ~/my-proj
./dir/foo.sh
./bar.sh

मैं सभी * .sh फ़ाइलों में कॉपीराइट फ़ाइल हेडर सम्मिलित करना चाहता हूं, उदाहरण के लिए मेरा हेडर है:

/*
 *  Copyright (c) 2015 by MyCompany, Inc.
 *  All rights reserved.
 */

मैं संघर्ष कर रहा हूं कि यह बहुस्तरीय है, मैं नीचे स्क्रिप्ट लिखने में कामयाब रहा लेकिन बहुस्तरीय के लिए काम नहीं कर रहा:

#!/bin/sh
HEADER=$(cat<<EOH
/*
 *  Copyright (c) 2015 by MyCompany, Inc.
 *  All rights reserved.
 */
)

find ~/my-proj/*.sh -exec sed -i "1s/^/$HEADER\n/" {} \;

जवाबों:


1

इसे इस्तेमाल करो:

header='/*\n *  Copyright (c) 2015 by MyCompany, Inc.\n *  All rights reserved.\n */\n'
find ~/my-proj/*.sh -exec sed -i "1s|^|$header|" {} \;

टिप्पणियाँ:

  1. शेल $headerसीधे sed कमांड में मूल्य को बदलेगा। यह मनमाने ढंग से कमांड के स्क्रिप्ट स्क्रिप्ट में इंजेक्शन लगाने की अनुमति देता है। करो नहीं जब तक आप के स्रोत पर विश्वास ऐसा करने header

  2. शीर्ष लेख में /वर्ण हैं। या तो उन पात्रों को बचाना होगा या फिर स्थानापन्न कमांड को एक अलग परिसीमन का उपयोग करना होगा। ऊपर में, |सीमांकक के रूप में इस्तेमाल किया गया था।

  3. शेल चरों के लिए कम या मिश्रित-केस का उपयोग करना सबसे अच्छा अभ्यास है। सिस्टम अपने चर के लिए ऊपरी मामले का उपयोग करता है और, जबकि यह इस मामले में कोई समस्या नहीं है, आप गलती से एक को अधिलेखित नहीं करना चाहते हैं।

उदाहरण

संशोधित sed कमांड को समझने के लिए, इस परीक्षण फ़ाइल पर विचार करें:

$ cat file
1
2
3

Sed कमांड उत्पन्न करता है:

$ sed "1s|^|$header|" file
/*
 *  Copyright (c) 2015 by MyCompany, Inc.
 *  All rights reserved.
 */
1
2
3
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.