同一フォルダにある複数のファイルを rubyを使って、ワンライナーで置換する。
□基本
find でファイルを見つけ、xargs を使って、rubyに渡す。
上の例では バックスラッシュやスラッシュを評価したくなかったので、シングルクォートを使うことにした。わかりにくいので%qとした。
□はまった所
当初の目的は、音楽ファイルの場所を記述したプレイリスト(テキストファイル)を、Windowsからandroid用に書き換えること。
たとえば、C:\music を /sdcard/music へ置換する。
次に、フォルダの区切りをwindowsの「\」からandroidの「/」に変更しようとした。
わけわかめだが、まぁできればいいんだ…。
スラッシュが絡むと、何がなんだかよくわらなくなる。
□基本
find でファイルを見つけ、xargs を使って、rubyに渡す。
% find . -name "file.name" -print0 | xargs -0 ruby -i.bak -p -e '$_.gsub!(%q{abcd}, %q{efgh})'※ruby の -i は元のファイル名に".bak"をつけてコピー。元のファイルを修正して保存する。
上の例では バックスラッシュやスラッシュを評価したくなかったので、シングルクォートを使うことにした。わかりにくいので%qとした。
□はまった所
当初の目的は、音楽ファイルの場所を記述したプレイリスト(テキストファイル)を、Windowsからandroid用に書き換えること。
たとえば、C:\music を /sdcard/music へ置換する。
% find . -name "*.m3u" -print0 | xargs -0 ruby -i.bak -p -e '$_.gsub!(%q{C:\music}, %q{/sdcard/music})'これはOK。
次に、フォルダの区切りをwindowsの「\」からandroidの「/」に変更しようとした。
% find . -name "*.m3u" -print0 | xargs -0 ruby -i.bak -p -e '$_.gsub!(%q{\}, %q{/})'これはエラーがでて失敗
-e:1: unterminated string meets end of file色々試行錯誤したもののわからず、友人に助けてもらいながら、成功。
-e:1: syntax error, unexpected $end, expecting ')'
% find . -name "*.m3u" -print0 | xargs -0 ruby -i.bak -p -e '$_.gsub!("\\", "\/")'シングルクォートがだめならダブルクォートでいいじゃない。ということか…。
わけわかめだが、まぁできればいいんだ…。
スラッシュが絡むと、何がなんだかよくわらなくなる。