Kode shell Anda memiliki dua masalah:
- The
echoseharusnya tidak ada.
- Variabel
$isalah ketik seperti $1dalam nama file tujuan.
Untuk membuat salinan file di direktori yang sama dengan file itu sendiri, gunakan
cp thefile thecopy
Jika Anda memasukkan hal lain di sana, mis
cp thefile theotherthing thecopy
maka diasumsikan bahwa Anda ingin menyalin thefiledan theotherthingmasuk ke direktori yang disebut thecopy.
Dalam kasus Anda, ini secara khusus mencari file yang dipanggil test.oggdan satu bernama echountuk menyalin ke direktori test$1.ogg.
The $1kemungkinan besar akan memperluas ke string kosong. Inilah sebabnya, ketika Anda menghapus echodari perintah, Anda mendapatkan "test.ogg dan test.ogg adalah file yang sama"; perintah yang dieksekusi pada dasarnya
cp test.ogg test.ogg
Ini mungkin salah ketik.
Pada akhirnya, Anda menginginkan sesuatu seperti ini:
for i in {1..100}; do cp test.ogg "test$i.ogg"; done
Atau, sebagai alternatif
i=0
while (( i++ < 100 )); do
cp test.ogg "test$i.ogg"
done
Atau, menggunakan tee:
tee test{1..100}.ogg <test.ogg >/dev/null
Catatan: Ini kemungkinan besar akan berfungsi untuk 100 salinan, tetapi untuk ribuan salinan mungkin menghasilkan kesalahan "daftar argumen terlalu lama". Dalam hal ini, kembali menggunakan loop.
echoyang seharusnya tidak ada, dan$1yang seharusnya$i?