आपके शेल कोड में दो मुद्दे हैं:
echo
वहाँ नहीं होना चाहिए।
- चर
$i
को $1
गंतव्य फ़ाइल नाम के रूप में गलत किया गया है।
फ़ाइल के रूप में एक ही निर्देशिका में फ़ाइल की एक प्रतिलिपि बनाने के लिए, का उपयोग करें
cp thefile thecopy
यदि आप वहाँ कुछ और सम्मिलित करते हैं, उदाहरण के लिए
cp thefile theotherthing thecopy
तो यह माना जाता है कि आप कॉपी करना चाहते हैं thefile
और theotherthing
में निर्देशिका कहा जाता है thecopy
।
आपके मामले में, यह विशेष रूप से एक फ़ाइल के लिए दिखता है, जिसे निर्देशिका में कॉपी करने के लिए test.ogg
नाम दिया echo
गया है test$1.ogg
।
$1
सबसे अधिक संभावना एक रिक्त स्ट्रिंग पर विस्तार होगा। यही कारण है, जब आप echo
कमांड से हटाते हैं, तो आपको "test.ogg और test.ogg एक ही फाइल हैं"; निष्पादित की जा रही कमांड अनिवार्य रूप से है
cp test.ogg test.ogg
यह शायद एक गलत व्यवहार है।
अंत में, आप कुछ इस तरह चाहते हैं:
for i in {1..100}; do cp test.ogg "test$i.ogg"; done
या, एक विकल्प के रूप में
i=0
while (( i++ < 100 )); do
cp test.ogg "test$i.ogg"
done
या, का उपयोग कर tee
:
tee test{1..100}.ogg <test.ogg >/dev/null
नोट: यह संभवतः 100 प्रतियों के लिए काम करेगा, लेकिन हजारों प्रतियों के लिए यह "तर्क सूची बहुत लंबी" त्रुटि उत्पन्न कर सकता है। उस स्थिति में, लूप का उपयोग करने के लिए वापस लौटें।
echo
नहीं है जो नहीं होनी चाहिए, और$1
जो होनी चाहिए$i
?