3
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

bashで連番ファイルを作成する

Posted at

背景

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 で引っ張ってきた引数を突っ込んだシェルスクリプトを動かせる。

3
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?