आपके शेल कोड में दो मुद्दे हैं:
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?