forループを使用してコマンドラインからビデオファイルをx回コピーしようとしています。次のようなことを試しましたが、うまくいきません。
for i in {1..100}; do cp test.ogg echo "test$1.ogg"; done
ベストアンサー1
シェルコードには2つの問題があります。
echo
そこにはいけません。- ターゲットファイル名の変数
$i
("dollar i")が("dollar one")として誤って入力されました。$1
ファイル自体と同じディレクトリにファイルのコピーを作成するには、次のようにします。
cp thefile thecopy
次のように複数のパラメータを使用する場合
cp thefile theotherthing thecopy
もしそうなら推定thefile
コピーしてtheotherthing
入力したいですか?目次呼ぶthecopy
。
あなたの場合は、cp test.ogg echo "test$1.ogg"
具体的に名前付きファイルを探し、test.ogg
名前付きファイルをecho
ディレクトリにコピーします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個のレプリカで動作する可能性が高いですが、何千ものレプリカに対して「パラメータリストが多すぎます」というエラーが発生する可能性があります。この場合はループ使用に戻してください。