Saya mencoba menggandakan file video x kali dari baris perintah dengan menggunakan for loop, saya sudah mencobanya seperti ini, tetapi tidak berhasil:
for i in {1..100}; do cp test.ogg echo "test$1.ogg"; done
Jawaban yang Diterima:
Kode shell Anda memiliki dua masalah:
echo
seharusnya tidak ada di sana.- Variabel
$i
salah ketik sebagai$1
di 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
ke direktori disebut thecopy
.
Dalam kasus Anda, ini secara khusus mencari file bernama test.ogg
dan satu bernama echo
untuk menyalin ke direktori test$1.ogg
.
$1
kemungkinan besar akan diperluas 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 adalah
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, ini mungkin menghasilkan kesalahan "daftar argumen terlalu panjang". Dalam hal ini, kembali menggunakan loop.