Provo a duplicare un file video x volte dalla riga di comando usando un ciclo for, l'ho provato in questo modo, ma non funziona:
for i in {1..100}; do cp test.ogg echo "test$1.ogg"; done
Risposta accettata:
Il tuo codice shell ha due problemi:
- L'
echo
non dovrebbe essere lì. - La variabile
$i
è stato digitato erroneamente come$1
nel nome del file di destinazione.
Per fare una copia di un file nella stessa directory del file stesso, usa
cp thefile thecopy
Se inserisci qualcos'altro, ad es.
cp thefile theotherthing thecopy
quindi si presume che desideri copiare thefile
e theotherthing
nella directory chiamato thecopy
.
Nel tuo caso, cerca specificamente un file chiamato test.ogg
e uno chiamato echo
per copiare nella directory test$1.ogg
.
Il $1
molto probabilmente si espanderà in una stringa vuota. Ecco perché, quando elimini echo
dal comando si ottiene “test.ogg e test.ogg sono gli stessi file”; il comando in esecuzione è essenzialmente
cp test.ogg test.ogg
Probabilmente è un errore di battitura.
Alla fine, vuoi qualcosa del genere:
for i in {1..100}; do cp test.ogg "test$i.ogg"; done
Oppure, in alternativa
i=0
while (( i++ < 100 )); do
cp test.ogg "test$i.ogg"
done
Oppure, utilizzando tee
:
tee test{1..100}.ogg <test.ogg >/dev/null
Nota:molto probabilmente funzionerebbe per 100 copie, ma per migliaia di copie potrebbe generare un errore "elenco di argomenti troppo lungo". In tal caso, torna a utilizzare un ciclo.