perlやrubyやFreeBSDのsedには-iがあるが、こんなのを各コマンドに用意するのはあほらしいので、inplace(1)を作った。こんな風に使う。
1 2 3 4 5 6 7 8 9 10 11 |
# ファイルをソート $ inplace -e sort file1 file2 file3 # 文字コードをUTF-8に変換 $ inplace -e 'nkf -w' *.txt # タイムスタンプを変えずにMP3タグを修正 $ inplace -te 'cp %1$s %2$s && mp3info -y 1999 -g "Progressive Rock" %2$s' *.mp3 # タイムスタンプを変えずに画像加工, バックアップは残す $ inplace -b.orig -te 'convert -rotate 270 -resize 50%% %s %s' *.jpg |
特長:
- 任意のフィルターコマンドラインを指定できる
- コマンドでエラーが起きた場合に置換をキャンセルしてくれる
- 出力結果が空だった場合に置換をキャンセルしてくれる(-zで制御可能)
- バックアップファイルも残せる(-b suffix)
- ファイルのモードやオーナーシップはもちろん、タイムスタンプも維持できる(-t)
- シンボリックリンクを辿り、元ファイルを置換することもできる(-L)
あ、これは今日書き始めて一発撮りしたまんまだから、テストは不十分です。言うまでもないが注意して使ってください。感想や報告や要望を歓迎します。
(追記: この稿の後、仕様が変わっています。新しい情報をチェックしてください。)