コマンドシェルでファイルをx回繰り返します。

コマンドシェルでファイルをx回繰り返します。

forループを使用してコマンドラインからビデオファイルをx回コピーしようとしています。次のようなことを試しましたが、うまくいきません。

for i in {1..100}; do cp test.ogg echo "test$1.ogg"; done

ベストアンサー1

シェルコードには2つの問題があります。

  1. echoそこにはいけません。
  2. ターゲットファイル名の変数$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個のレプリカで動作する可能性が高いですが、何千ものレプリカに対して「パラメータリストが多すぎます」というエラーが発生する可能性があります。この場合はループ使用に戻してください。

おすすめ記事