背景
Dropboxみたいなクラウドストレージに大量のファイルを配置した時にどんな挙動になるのかをテストする際に、連番ファイルを作成する必要がありました。
解決策
{0..10}
などとすると連番が生成できる。これはbashのブレース展開という機能。これを使って、以下のように touch
コマンドを合わせると、連番ファイルを簡単に作ることができた。
touch {0..10}
上記例だと中身が空っぽのファイルができあがる。なにか適当な文字列を書き込んだファイルを作りたいなら以下のようにするとできる。ただし、何百、何千といったファイルを作る場合はエラーが出てしまう可能性がある。 (too many files open
みたいなエラー)
echo "hoge" | tee {0..10}.txt
以下のようにやれば、2000個とかの大量のファイルもいけた。まずはファイルを作成しておいて、後からそれらに文字列を流し込む、ということ。
# 連番ファイル作成用の空のフォルダにいる前提です。
touch {0..2000}.txt
ls -1 | xargs -I {} sh -c 'echo hoge > {}'
注意
fish だとこの書き方では動かない。 {0..10}
のような文法が存在しないらしい。以下の記事のような記法を使えば、fishでも多分同じようなことできる。
@ryotako fishでも{1..9}を展開したい! https://qiita.com/ryotako/items/70827643a20fa60b2547
あとがき
以下の点が便利だと感じた。シェルスクリプトあんまり使いこなせていない。。。
* xargs
を使って {}
に前のコマンドの出力を流し込む。
* sh -c
を使って xargs
で引っ張ってきた引数を突っ込んだシェルスクリプトを動かせる。