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'
echonon dovrebbe essere lì. - La variabile
$iè stato digitato erroneamente come$1nel 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.