SSブログ

特定のディレクトリから再帰的に特定のオーナーのファイルやディレクトリだけchownしたい [小技(Linux)]

習うより慣れろfindコマンド応用術

 例えば、/home/hoge/ディレクトリの下にある全てのファイルやディレクトリのオーナーを変更したい!という場合は単純に

 chown -R newOwner /home/hoge/*

 と、実行すればよい。別に難しい話ではない。
 ところが、例えば会社などで「○○さんが退職したので、業務を××さんが引き継いだ。ファイルのオーナーも、○○さんのファイルだけ××さんに移管したい」というケースがたまーーーーーーーーーーーーーにあるかもしれない。無いかもしれない。
 そんなときに、上記のようなchownコマンドでは甚だ都合が悪いことも出てくる。というのも、上記の例では「/home/hoge/」配下にある全てのファイルやディレクトリのオーナーを片っ端からnewOwnerに変更してしまうので、移管したくない「△△さん」のファイルなどがあっても、それらも関係なしにchownされてしまうのである。

 このように、再帰的だがファイルやディレクトリの条件次第で実行したりしなかったりするケースがある場合に、findコマンドが役に立つ。

 ここでは、oldOwnernewOwnerに変更する例を示す。

 find /some-directory -user oldOwner -exec chown newOwner {} \;

 findコマンドで検索されたファイル名が、「{}」の部分に代入されてchownコマンドが実行される。
 なお、-execオプションの替わりに、xargsコマンドでつなげてもよい。

 find /some-directory -user oldOwner -print | xargs chown newOwner

 とかこんな具合。こちらの例では、findコマンドが条件にマッチしたファイルをいったん標準出力に出力すると、パイプを経由してxargsコマンドがそれを受け取り、chownコマンドを各々起動するとかいう具合になる。

 なお、どちらのケースでもchown コマンドに -R オプションはつけないこと!!

 追記:

 「特定のオーナーのファイルだけオーナーを変更したいんだけど、カレントディレクトリだけやってくれれば十分で、再帰的に実行してほしくないんだけど…」という場合、findコマンドに「-maxdepth 1」というオプションを追加すれば解決する。

 find /some-directory -maxdepth 1 -user oldOwner -exec chown newOwner {} \;

 このとき、「-user」オプションのに「-maxdepth 1」を記述しないと、警告メッセージが出てくるので要注意。

nice!(0)  コメント(0)  トラックバック(0) 

nice! 0

コメント 0

コメントを書く

お名前:
URL:
コメント:
画像認証:
下の画像に表示されている文字を入力してください。

※ブログオーナーが承認したコメントのみ表示されます。

トラックバック 0

この広告は前回の更新から一定期間経過したブログに表示されています。更新すると自動で解除されます。