รหัสเชลล์ของคุณมีสองประเด็น:
echoไม่ควรจะมี
- ตัวแปร
$iถูกพิมพ์ผิดเช่นเดียวกับ$1ในชื่อไฟล์ปลายทาง
ในการทำสำเนาไฟล์ในไดเรกทอรีเดียวกับไฟล์นั้นให้ใช้
cp thefile thecopy
หากคุณใส่อะไรเข้าไปในนั้นเช่น
cp thefile theotherthing thecopy
แล้วมันจะสันนิษฐานว่าคุณต้องการคัดลอกthefileและtheotherthingเข้าไปในไดเรกทอรีthecopyที่เรียกว่า
ในกรณีของคุณมันโดยเฉพาะมองหาไฟล์ที่เรียกว่าtest.oggและเป็นหนึ่งในชื่อที่จะคัดลอกไปยังไดเรกทอรีechotest$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?