素人Tips
bashスクリプトを書いたんですが、ちょっとつまずいたのでメモしておきます。
何が影響したか、いまいちわかってないのですが・・・。
webの情報では、私のやり方でもできそうだったのに、なんででしょう?
bashスクリプトで、”ls *.txt"を使ったらうまくいかなかった
少し、調べないとできなかったのでメモします。
[やりたいこと]
ディレクトリにあるファイルに含まれる、"aa"を"bb"に変更する。
1 2 3 4 5 6 7 |
#!/usr/bin/bash -f files=`ls *.txt` #ここで怒られる for file in $files; do sed -i 's/aa/bb/g' $file done |
cshとかだったらこのように書くのですが、bashの場合は怒られます。理由はよくわかってないですが、下のように修正。find使うようです。
そしたら、正常に動作しました
↓
1 2 3 4 5 6 7 8 |
#!/usr/bin/bash -f files=`find . -name "*.txt"` for file in $files; do sed -i 's/aa/bb/g' $file #sed -i ".bak" 's/aa/bb/g' $file #mac(BSD)の場合は、こんな感じに書く done |
スポンサーリンク
おまけ
この例では、sedでファイルを上書きしていますが、ファイル名を一括で変えたい場合は、以下のようにします。
1 2 3 |
rename aa bb *.txt #もしくは、 rename 's/aa/bb/' *.txt |