รหัสเชลล์ของคุณมีสองประเด็น:
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
?