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コピーで機能する可能性が高いですが、数千コピーの場合、「引数リストが長すぎます」というエラーが生成される可能性があります。その場合は、ループの使用に戻ります。