質問: コマンドライン上であるファイルhoge.datを複数個コピーして,hoge-1.dat,hoge-2.dat・・・を作りたいです. 簡単なコマンドがあれば教えて下さい.よろしくお願いします. Brace Expansionが使えるかと思い, ``` $cp hoge{,-1,-2}.dat ``` と入力しましたが,cp: hoge-2.dat is not a directory と出てきてできませんでした.
回答: 基本的な考え方として、 cp コマンドで、一つのファイルを一度に複数のファイルにコピーすることはできないと思います。 なので、一対一のコピーを複数回実行するというやりかたになります。 私の思いつける範囲ではあなたの意図していることを実現しようとすると コマンドラインは以下のようになります。 ``` $ for i in 1 2 ; do cp hoge{,-$i}.dat ; done ``` すいません、あんまり簡単ではないですね。 もっといいテクニックがあるもしれません。 ``` $ cp hoge{,-1,-2}.dat ``` がエラーになったのは、その展開結果である `cp hoge.dat hoge-1.dat hoge-2.dat` が、 ``` $ man cp ``` として、 cp のマニュアルページを出したときの、SYNOPSIS に示されるいくつかの書式のうちの > > cp [OPTION]... SOURCE... DIRECTORY > > > であると解釈されてしまっているからです。 cp に 2 つ以上のファイルを指定した場合は基本的にこの書式であると解釈されます。