Linuxコマンドで連番のファイルを作成する
# 概要
コマンドラインで、test.txtをコピーしtest0001.txt, test0002.txt,・・・test1000.txtの1000ファイルを作成したい。
# コマンド
for文を使用して以下のように入力する。
$ for i in $(seq -w 1 1 1000);do cp ./test.txt ./test$i.txt;done
# コマンドの内容
特に深く考えなくてもいいですが、コマンドとしては
seq
コマンドを使用してゼロ埋めのを連番を変数iに格納し、変数iの番号を用いてcp
コマンドを実行。という流れです。
# for文
for;do;done
の組み合わせで、do
–done
間のコマンドをfor
条件終了まで実行します。
# seqコマンド
seq
(sequence)コマンドは、連続した一定間隔の数値を出力するコマンドです。for文の変数に値を格納する際に使用しています。
# 基本構文
seq [option][開始する値] [数値の間隔] [終了する値]
となっています。
例えば、
seq 5 1 10
とすると、5から10まで、1ずつ加算し、5, 6 ,7 ,8 ,9 ,10という連番を作成します。
# オプション
-w
オプションは、ゼロパティングをする場合に使用します。[終了する値]の桁数に揃えて出力してくれます。
seq -w 1 1 00100
とすると、00001~00100までの連番を作成します。
ほかにもオプションがありますが今回は使いませんでした。
# 実行前に確認する
いきなり実行するのが不安なときは、コマンド中間部の
do cp ./test.txt ./test$i.txt
を
do echo ./test$i.txt
に変更します。これでコピーではなく、出力後のファイル名だけをとりあえず画面に出力でき、確認できます。
# 変数後の文字に注意
連番の後にも文字列を繋げるときは、文字列が変数名として認識されないように注意が必要です。例えば、
test0001_hoge.txt, test0002_hoge.txt・・・と作成しようとして
$ for i in $(seq -w 1 1 1000);do cp ./test.txt ./test$i_hoge.txt;done
と入力すると、i_hoge
までが変数名として処理され、空の変数のため結局コピー元のファイル名と同一になり
cp: './test.txt' and './test.txt' are the same file
とエラーになってしまいます。
# バックスラッシュを使う
変数名後に文字列を入れたい場合は、変数名$iの後にバックスラッシュ\を入力しておけば大丈夫です。
$ for i in $(seq -w 1 1 1000);do cp ./test.txt ./test$i\_hoge.txt;done