大量ファイル一括編集スクリプト
非常に多くのテキストファイルの一部のみ変更したい、そんな場合に使うスクリプトを書いた。流れとしては、
というシンプルなものだが、念のためメモ。
#!/bin/bash change-style () { if [ -f $1 ]; then mv $1 $1.original sed "s/target_strings/replaced_strings/g" $1.original > $1 rm $1.original fi } ls -RF ~/somedirectory/ | grep / | sed "s/://g" > targets count=0 while read line; do ARRAY[$count]=$line count=`expr $count+1` done < targets i=0 while (( $i < $count )) do change-style ${ARRAY[$i]}/A.txt change-style ${ARRAY[$i]}/B.txt change-style ${ARRAY[$i]}/C.txt i=`expr $i + 1` done rm targets
/bin/sh ベースだったものを /bin/bash にそのまましたから、おそらく bash では死語に近い(?)expr とか残ってしまっているがとりあえず動作することを確認した。この例だと、~/somedirectory/以下のA.txt、B.txt、C.txt内のtarget_stringsがreplaced_stringsに置き換わる。somedirectory以下にサブディレクトリが複数あって、そのそれぞれのディレクトリにA.txt、B.txt、C.txtがあり、それらを一括で変換したいような場合に使えるスクリプト。自分の仕事の中でこういったシーンに出くわすことがあるので書いてみた。これでかなりの時間削減ができそうだ。