forループを使用してコマンドラインからビデオファイルをx回複製しようとしました。このように試しましたが、機能しません:
for i in {1..100}; do cp test.ogg echo "test$1.ogg"; done
承認された回答:
シェルコードには2つの問題があります:
エコーコード> そこにあるべきではありません。- 変数
$i$ 1と誤って入力されています 宛先ファイル名で。
ファイル自体と同じディレクトリにファイルのコピーを作成するには、
を使用します。cp thefile thecopy
そこに何か他のものを挿入した場合、例:
cp thefile theotherthing thecopy
次に、ファイルをコピーすると想定されます。 およびtheotherthing ディレクトリに thecopyと呼ばれます 。
あなたの場合、それは特に test.oggと呼ばれるファイルを探します echoという名前の1つ ディレクトリtest$ 1.oggにコピーします 。
$ 1 ほとんどの場合、空の文字列に展開されます。これが、 echoを削除するときに コマンドから、「test.oggとtest.oggは同じファイルです」を取得します。実行されているコマンドは基本的に
cp test.ogg test.ogg
これはおそらくタイプミスです。
結局、あなたはこのようなものが欲しいです:
for i in {1..100}; do cp test.ogg "test$i.ogg"; done
または、代替手段として
i=0
while (( i++ < 100 )); do
cp test.ogg "test$i.ogg"
done
または、 teeを使用します :
tee test{1..100}.ogg <test.ogg >/dev/null
注:これは100コピーで機能する可能性が高いですが、数千コピーの場合、「引数リストが長すぎます」というエラーが生成される可能性があります。その場合は、ループの使用に戻ります。