Contents
bash Tips
同じ、ディレクトリのファイルを一律に処理したい場合、多いですよね。
そういう時は、シェルでやるのが便利ですよね。
今回は、bashの場合で、実際やってみましょう。
やってみたい例1
簡単な例ですが、カレントフォルダのファイルを表示してみましょう。
このファイルの中身を表示してみましょう。
1 2 3 |
>ls 1.txt 3.txt 2.txt for_bash_sample0.sh |
for_bash_sample0.shの中身
1 2 3 4 5 6 7 8 9 |
#!/bin/bash LIST=`ls *.txt` for file in $LIST do echo "$file :" cat $file done |
実行結果:
1 2 3 4 5 6 |
1.txt : aa 2.txt : bb 3.txt : cc |
うーん、簡単ですね。そもそもそれって、これですよね?って言われます。
1 |
>cat * |
やってみたい例2
今度は、さっきのファイル名を変えてみましょう。
1.txtなら、1_2.txt。これを存在するファイルに実行してみましょう。
for_bash_sample.shを以下のように書きます。
for_bash_sample.shの中身
1 2 3 4 5 6 7 8 9 10 11 12 13 |
#!/bin/bash LIST=`ls *.txt` for file in $LIST do echo "$file: {org}.txt --> {org}_2.txt" file_name=${file%.*} file_ext=${file#*.} new_file_name=${file_name}_2 cp -p ${file} ${file_name}_2.${file_ext} done |
実行結果
1 2 3 4 |
> ./for_bash_sample.sh 1.txt: {org}.txt --> {org}_2.txt 2.txt: {org}.txt --> {org}_2.txt 3.txt: {org}.txt --> {org}_2.txt |
1 2 3 4 |
>ls 1.txt 2_2.txt for_bash_sample.sh 1_2.txt 3.txt for_bash_sample0.sh 2.txt 3_2.txt |
てな具合に、*_2.txtのファイルが作れました。
if文とかも入れて、ファイル単位に変換ルールを変えると、便利に使えますよ。
同じスクリプトを実行する場合とかにも使ったりします。
では、お役にててば幸いです。
スポンサーリンク
おまけ
以下のように書けば、もっと短くかけそう。
1 |
new_file_name=${file_name/.txt/_2.txt} |
いろいろ書けて便利ですね。
関連記事