Kode shell Anda memiliki dua masalah:
- The
echo
seharusnya tidak ada.
- Variabel
$i
salah ketik seperti $1
dalam 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 thefile
dan theotherthing
masuk ke direktori yang disebut thecopy
.
Dalam kasus Anda, ini secara khusus mencari file yang dipanggil test.ogg
dan satu bernama echo
untuk menyalin ke direktori test$1.ogg
.
The $1
kemungkinan besar akan memperluas ke string kosong. Inilah sebabnya, ketika Anda menghapus echo
dari 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.
echo
yang seharusnya tidak ada, dan$1
yang seharusnya$i
?