grepに「-l」を付けた時とfindはどちらもファイル名を列挙するコマンドです。
これらと他のコマンドをパイプで組み合わせると、「検索したファイル内の文字列をAからBにすべて置き換える」というような処理が可能になります。
今回はサーバー移転時に使える、便利なコマンドの組み合わせをご紹介します。
grep + xargs + sed
サーバー移転時にはディレクトリのパスが変更される場合が多いですが、下記のようにすればディレクトリ内の全ファイルのパスを簡単に置換して簡単に新サーバーに対応させることが可能になります。
grep -l '/var/www' ./* | xargs sed -e 's/\/var\/www/\/home\/www/g'
⇒カレントディレクトリ以下のファイル内にある「/var/www」という文字列を全て「/home/www」に変更する
ざっと説明すると、パイプ前で必要なファイルの検索、パイプ後で対象ファイルの中にある文字列を置換、という動作になっています。
sedの説明
sedの機能はいろいろあるので詳細は割愛しますが、今回使っているのは文字列置換の機能です。
sed -e 's/(置換前文字列)/(置換後文字列)/g' (ファイル名)
これでファイル内の対象文字列を全て置換できます。
なお、「-i」コマンドを使うと、置換前文字列を含んだ元ファイルを残すことができます。上記のコマンド組み合わせ例ですと、以下のようにすべきかもしれません。
grep -l '/var/www' ./* | xargs sed -i.bak -e 's/\/var\/www/\/home\/www/g'
xargsの説明
xargsというコマンドは、標準入力から受け取った引数を読み込んで、その直後に指定するコマンドを実行します。
上記コマンド例ですと、「grep -l ‘/var/www’ ./*」部分で「/var/www」を含む全てのファイルが出力され、それをxargsが受け取って「sed -e ‘s/\/var\/www/\/home\/www/g’ (ファイル名)」というコマンドを実行します。
find + chmod
サーバー移転時に、まとめてパーミッションを変更したい場合も出てくると思います。そんな時は以下のようにfindとchmodを組み合わせると便利です。
find . -type f -print | xargs chmod 644
⇒カレントディレクトリ以下のファイルのパーミッションを全て644にする
これでディレクトリ単位でまとめてパーミッションを変更できます。