インデックスをつけながらファイルをコピーする&出来たファイルを削除する。

ファイルをたくさんコピーして、パフォーマンステストをしたかったのでこんなスクリプトを作った。コピーしたいファイルと、コピーしたい回数を渡してやると、ファイル名の最後にインデックスを付けながら指定した数のファイルを作成していきます。
copy_file.sh

#!/bin/bash
BASE=/root/wis/test
filename=$1
loop=$2

echo "copy file: $filename"

for i in $(seq 1 $loop)
do
  cp $BASE/$filename $BASE/${filename}_$i
done

使い方は

./copy_file.sh [コピーしたいファイル名] [コピーしたい回数]

今回30,000件同じファイルを作ってみた。

./copy_file.sh test.txt 30000

その後ファイルを削除しようとrmを実行したら、

rm test.txt*
-bash: /bin/rm: 引数リストが長すぎます

って、怒られてしまった。どうやら3万件もrmの引数に渡せないらしい。調べてみると「xargs」っていうコマンドを介してやればうまくいくことが分かった。

echo test.txt* |xargs rm

いやー。よかった。