背景
普段ファイルをzip圧縮したい時は、コマンドラインから下記の様に処理していました。
bash
# テキストファイルsample01.txtをsample01.zipに圧縮$ zip sample01.zip sample01.txt
しかし、この処理を大量のファイルに対して圧縮及び採番するとなるとあまりにも面倒(というか非現実的)な為、bashでforループ回せないかな?と思って調べたことをメモります。
bashでforループ
まずはbash上でのforループの構文を確認。
bash
$ for 変数 in 値リスト
>do>なんか処理
>done
となります。意外とシンプル。
例えば、forループお決まりの0から9までの数字を出力する例だと
bash
$ for i in 0 1 2 3 4 5 6 7 8 9
>do>echo$i>done
もしくは
bash
$ for i in`seq 0 9`>do>echo$i>done
出力結果
0
1
2
3
4
5
6
7
8
9
となります。
sample01.txt ~ sample50.txtを1つずつzip圧縮
さて、本題に入ります。
連番で名前が付いているファイルを1つずつ圧縮するには上記のfor文を使うのですが、桁数の都合上01から09までと10から50までの処理を分ける必要があります。
ifで分岐して処理しても良いのですが、そんなにしょっちゅう使うものでもないしなぁ、ということでご容赦下さい。以下のように書きます。
※他に何か良い方法があれば是非教えて下さい!
bash
$ for i in`seq 1 9`>do> zip sample0$i.zip sample0$i.txt
>done
bash
$ for i in`seq 10 50`>do> zip sample$i.zip sample$i.txt
>done
これでsample01.zip ~ sample50.zipが作成されているはずです!