• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:ディレクトリ内の複数のテキストファイルの文字列を、一括置換する方法について)

ディレクトリ内の複数のテキストファイルの文字列を一括置換する方法

このQ&Aのポイント
  • ディレクトリ内にある複数のテキストファイルの文字列を一括で置換する方法について教えてください。所有者とパーミッションを変更せずに置換する方法を探しています。
  • sedコマンドを試しましたが、オプションについて理解が足りず上手く行きませんでした。所有者がrootに変更されたり、別ファイル名で保存される問題が発生しました。
  • どなたか、簡単に所有者やパーミッションを変更せずにディレクトリ内の複数のテキストファイルの文字列を一括置換する方法をご教示いただけますか?

質問者が選んだベストアンサー

  • ベストアンサー
noname#9431
noname#9431
回答No.1

置換に関しては、ファイルの所有者が変ってしまうことが問題で、置換自体は出来るのですかね? たぶん、/web/cgiの permisionのため1度rootになって作業してしまうので、 変更後のファイルの所有者がrootになってしまう。 それを避けたいということでいいでしょうか。 (sedでもawkでも中間ファイルを介する点は避けられないと思います。 まあそれは後で消しておけばよしとして。) 属性の変更を避けるには、 01.cgi等の所有者でloginしているとして、 1) su で rootになる。 2) /web/cgiの属性を777に変更 3) 一度 exitして login user に戻る。 4) cgiファイルの変更 5) またrootになって、/web/cgiの属性をもとにもどす。 でどうでしょう? (.cgi の属性を変更する必要があれば4)でしてください。) 泥くさいですが、一応以上でできるのでは? 一括で変換に関しては、 /web/cgi/にある全ての*.cgiに対しjcode.pl→../../jcode.pl の変換をするとしたら、 4)の段階で/web/cgi で #!/bin/sh for i in `ls *.cgi` do sed 's/jcode\.pl/\.\.\/\.\.\/jcode\.pl/g' $i > temp mv temp $i done を、例えば、henkan.shとして保存したのち、 chmod +x henkan.sh ./henkan.sh でいけるのではないでしょうか。 何分私も初心者ですので、まちがったことをいってるかもしれませんし、もっと賢いやり方があるかもしれません。

関連するQ&A