Ich versuche, eine Videodatei x-mal von der Befehlszeile aus zu duplizieren, indem ich eine for-Schleife verwende, ich habe es so versucht, aber es funktioniert nicht:
for i in {1..100}; do cp test.ogg echo "test$1.ogg"; done
Akzeptierte Antwort:
Ihr Shell-Code hat zwei Probleme:
- Das
echo
sollte nicht da sein. - Die Variable
$i
ist fälschlicherweise als$1
eingegeben im Zieldateinamen.
Um eine Kopie einer Datei im selben Verzeichnis wie die Datei selbst zu erstellen, verwenden Sie
cp thefile thecopy
Wenn Sie dort etwas anderes einfügen, z. B.
cp thefile theotherthing thecopy
dann wird davon ausgegangen, dass Sie thefile
kopieren möchten und theotherthing
in das Verzeichnis genannt thecopy
.
In Ihrem Fall sucht es speziell nach einer Datei namens test.ogg
und eine namens echo
in das Verzeichnis test$1.ogg
zu kopieren .
Der $1
wird höchstwahrscheinlich zu einer leeren Zeichenfolge erweitert. Deshalb, wenn Sie das echo
löschen aus dem Befehl erhalten Sie „test.ogg und test.ogg sind die gleichen Dateien“; der ausgeführte Befehl ist im Wesentlichen
cp test.ogg test.ogg
Dies ist wahrscheinlich ein Tippfehler.
Am Ende möchten Sie so etwas:
for i in {1..100}; do cp test.ogg "test$i.ogg"; done
Oder alternativ
i=0
while (( i++ < 100 )); do
cp test.ogg "test$i.ogg"
done
Oder mit tee
:
tee test{1..100}.ogg <test.ogg >/dev/null
Hinweis:Dies würde höchstwahrscheinlich für 100 Kopien funktionieren, aber für Tausende von Kopien kann es einen „Argumentliste zu lang“-Fehler erzeugen. Verwenden Sie in diesem Fall wieder eine Schleife.