どうも、シローです。
今回はブレース展開
について整理しました。
ブレース展開とは
コマンド中に{}
で挟んだ中身の要素分だけ実行を繰り返す手法です。
例:
1 2 3 4 5 |
# file-test.txt と file-hoge.txtを生成する $ touch file-{test,hoge}.txt # file-1.txt, file-2.txt, ... file-10.txtを生成する $ touch file-{1..10}.txt |
文法
カンマ区切りを展開・・{文字列1,文字列2,文字列3,...,文字列N}
文字列をカンマで区切った場合はそれらをそのまま展開します。
1 2 |
$ echo {test,hoge,fuga,piyo} test hoge fuga piyo |
連番を展開・・{最初(1とかaとかAとか)..最後}
アルファベットや数字を「..」(ピリオド2つ)で区切った間を連続して展開します。
1 2 3 4 5 6 7 8 9 10 11 |
# 数字の連番 $ echo {1..100} 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 # アルファベットの連番 $ echo {a..z} a b c d e f g h i j k l m n o p q r s t u v w x y z # 逆順も可能 $ echo {100..1} 100 99 98 97 96 95 94 93 92 91 90 89 88 87 86 85 84 83 82 81 80 79 78 77 76 75 74 73 72 71 70 69 68 67 66 65 64 63 62 61 60 59 58 57 56 55 54 53 52 51 50 49 48 47 46 45 44 43 42 41 40 39 38 37 36 35 34 33 32 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 $ echo {z..a} z y x w v u t s r q p o n m l k j i h g f e d c b a |
複数のブレース展開を組み合わせる
文中に複数のブレース展開が含まれた場合、その中の組み合わせ分を展開します。(ちょっと言葉で説明しづらい・・
1 2 3 4 5 6 7 |
#ブレース展開を2つ $ echo {test,hoge}-{1..10} test-1 test-2 test-3 test-4 test-5 test-6 test-7 test-8 test-9 test-10 hoge-1 hoge-2 hoge-3 hoge-4 hoge-5 hoge-6 hoge-7 hoge-8 hoge-9 hoge-10 #ブレース展開を3つ echo {test,hoge}-{1..10}{a..z} test-1a test-1b test-1c test-1d test-1e test-1f test-1g test-1h test-1i test-1j test-1k test-1l test-1m test-1n test-1o test-1p test-1q test-1r test-1s test-1t test-1u test-1v test-1w test-1x test-1y test-1z test-2a test-2b test-2c test-2d test-2e test-2f test-2g test-2h test-2i test-2j test-2k test-2l test-2m test-2n test-2o test-2p test-2q test-2r test-2s test-2t test-2u test-2v test-2w test-2x test-2y test-2z test-3a test-3b test-3c test-3d test-3e test-3f test-3g test-3h test-3i test-3j test-3k test-3l test-3m test-3n test-3o test-3p test-3q test-3r test-3s test-3t test-3u test-3v test-3w test-3x test-3y test-3z test-4a test-4b test-4c test-4d test-4e test-4f test-4g test-4h test-4i test-4j test-4k test-4l test-4m test-4n test-4o test-4p test-4q test-4r test-4s test-4t test-4u test-4v test-4w test-4x test-4y test-4z test-5a test-5b test-5c test-5d test-5e test-5f test-5g test-5h test-5i test-5j test-5k test-5l test-5m test-5n test-5o test-5p test-5q test-5r test-5s test-5t test-5u test-5v test-5w test-5x test-5y test-5z test-6a test-6b test-6c test-6d test-6e test-6f test-6g test-6h test-6i test-6j test-6k test-6l test-6m test-6n test-6o test-6p test-6q test-6r test-6s test-6t test-6u test-6v test-6w test-6x test-6y test-6z test-7a test-7b test-7c test-7d test-7e test-7f test-7g test-7h test-7i test-7j test-7k test-7l test-7m test-7n test-7o test-7p test-7q test-7r test-7s test-7t test-7u test-7v test-7w test-7x test-7y test-7z test-8a test-8b test-8c test-8d test-8e test-8f test-8g test-8h test-8i test-8j test-8k test-8l test-8m test-8n test-8o test-8p test-8q test-8r test-8s test-8t test-8u test-8v test-8w test-8x test-8y test-8z test-9a test-9b test-9c test-9d test-9e test-9f test-9g test-9h test-9i test-9j test-9k test-9l test-9m test-9n test-9o test-9p test-9q test-9r test-9s test-9t test-9u test-9v test-9w test-9x test-9y test-9z test-10a test-10b test-10c test-10d test-10e test-10f test-10g test-10h test-10i test-10j test-10k test-10l test-10m test-10n test-10o test-10p test-10q test-10r test-10s test-10t test-10u test-10v test-10w test-10x test-10y test-10z hoge-1a hoge-1b hoge-1c hoge-1d hoge-1e hoge-1f hoge-1g hoge-1h hoge-1i hoge-1j hoge-1k hoge-1l hoge-1m hoge-1n hoge-1o hoge-1p hoge-1q hoge-1r hoge-1s hoge-1t hoge-1u hoge-1v hoge-1w hoge-1x hoge-1y hoge-1z hoge-2a hoge-2b hoge-2c hoge-2d hoge-2e hoge-2f hoge-2g hoge-2h hoge-2i hoge-2j hoge-2k hoge-2l hoge-2m hoge-2n hoge-2o hoge-2p hoge-2q hoge-2r hoge-2s hoge-2t hoge-2u hoge-2v hoge-2w hoge-2x hoge-2y hoge-2z hoge-3a hoge-3b hoge-3c hoge-3d hoge-3e hoge-3f hoge-3g hoge-3h hoge-3i hoge-3j hoge-3k hoge-3l hoge-3m hoge-3n hoge-3o hoge-3p hoge-3q hoge-3r hoge-3s hoge-3t hoge-3u hoge-3v hoge-3w hoge-3x hoge-3y hoge-3z hoge-4a hoge-4b hoge-4c hoge-4d hoge-4e hoge-4f hoge-4g hoge-4h hoge-4i hoge-4j hoge-4k hoge-4l hoge-4m hoge-4n hoge-4o hoge-4p hoge-4q hoge-4r hoge-4s hoge-4t hoge-4u hoge-4v hoge-4w hoge-4x hoge-4y hoge-4z hoge-5a hoge-5b hoge-5c hoge-5d hoge-5e hoge-5f hoge-5g hoge-5h hoge-5i hoge-5j hoge-5k hoge-5l hoge-5m hoge-5n hoge-5o hoge-5p hoge-5q hoge-5r hoge-5s hoge-5t hoge-5u hoge-5v hoge-5w hoge-5x hoge-5y hoge-5z hoge-6a hoge-6b hoge-6c hoge-6d hoge-6e hoge-6f hoge-6g hoge-6h hoge-6i hoge-6j hoge-6k hoge-6l hoge-6m hoge-6n hoge-6o hoge-6p hoge-6q hoge-6r hoge-6s hoge-6t hoge-6u hoge-6v hoge-6w hoge-6x hoge-6y hoge-6z hoge-7a hoge-7b hoge-7c hoge-7d hoge-7e hoge-7f hoge-7g hoge-7h hoge-7i hoge-7j hoge-7k hoge-7l hoge-7m hoge-7n hoge-7o hoge-7p hoge-7q hoge-7r hoge-7s hoge-7t hoge-7u hoge-7v hoge-7w hoge-7x hoge-7y hoge-7z hoge-8a hoge-8b hoge-8c hoge-8d hoge-8e hoge-8f hoge-8g hoge-8h hoge-8i hoge-8j hoge-8k hoge-8l hoge-8m hoge-8n hoge-8o hoge-8p hoge-8q hoge-8r hoge-8s hoge-8t hoge-8u hoge-8v hoge-8w hoge-8x hoge-8y hoge-8z hoge-9a hoge-9b hoge-9c hoge-9d hoge-9e hoge-9f hoge-9g hoge-9h hoge-9i hoge-9j hoge-9k hoge-9l hoge-9m hoge-9n hoge-9o hoge-9p hoge-9q hoge-9r hoge-9s hoge-9t hoge-9u hoge-9v hoge-9w hoge-9x hoge-9y hoge-9z hoge-10a hoge-10b hoge-10c hoge-10d hoge-10e hoge-10f hoge-10g hoge-10h hoge-10i hoge-10j hoge-10k hoge-10l hoge-10m hoge-10n hoge-10o hoge-10p hoge-10q hoge-10r hoge-10s hoge-10t hoge-10u hoge-10v hoge-10w hoge-10x hoge-10y hoge-10z |
用途例
あらかじめ変数に取りうる値が決まっていて、それらをコマンドで繰り返し実行する際に便利です。
連番のファイルを生成する
1 |
$ touch file-{a..z}.txt |
連番のディレクトリを生成する
1 |
$ mkdir dir{1..10} |
複数のブレース展開でツリー構造のディレクトリも生成できます。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 |
$ mkdir -p dir1/dir{1..10}/dir{a..z} $ tree dir1 dir1 ├── dir1 │ ├── dir1 │ ├── dir2 │ ├── dir3 │ ├── dir4 │ ├── dir5 │ ├── dira │ ├── dirb │ ├── dirc │ ├── dird │ ├── dire │ ├── dirf │ ├── dirg │ ├── dirh │ ├── diri │ ├── dirj │ ├── dirk │ ├── dirl │ ├── dirm │ ├── dirn │ ├── diro │ ├── dirp │ ├── dirq │ ├── dirr │ ├── dirs │ ├── dirt │ ├── diru │ ├── dirv │ ├── dirw │ ├── dirx │ ├── diry │ └── dirz ├── dir2 │ ├── dira │ ├── dirb |
ファイルのバックアップ作成
こちらの記事を参考(https://qiita.com/ine1127/items/6e5fe80f4a9c64509558)
同じ文字列を何回か記述するコマンドとは相性が良さそうです
1 |
$ cp /test/hoge/fuga/piyo.txt{,.bk} |
ファイルのZip化
1 |
$ zip -r dir1{.zip,} |
まとめ
- ブレース展開は
{}
で囲った中身の要素分のコマンドを実行できる - カンマ区切りで要素の中身を1つずつ取り出す
- 「..」で数字やアルファベットの連番で取り出す
- 複数のブレース展開はブレース内の要素の組み合わせになる
- ブレース展開では複数のファイル・フォルダを生成したり、バックアップや圧縮などのコマンドに使えば記述が楽になる