web-dev-qa-db-ja.com

所有者/グループを再帰的に変更するより速い方法は?

現在、所有者/グループを再帰的に変更する場合は、次のようにします。

find . -type f -exec chown <owner>.<group> {} \;
find . -type d -exec chown <owner>.<group> {} \;

ただし、コマンドごとに数分かかる場合があります。すべてのファイルを一度に1つではなく一度に変更する方法があったと聞きましたが、情報を見つけることができません。それはできますか?

23
danzo

独自の再帰を行うchownのようなコマンドの場合、そのオプションを使用するのが最も高速です。

 chown -R owner:group * .[^.]*

警告!一部のシェルでは、chown -R owner:group * .*という形式がルートディレクトリ/の所有者を置き換えます。 .*../../../../root, ../bin ... etcを意味するため。すべてのパス。ただし、最も広く使用されているシェルbashは、.および..の拡張パターンを適用しません。

ただし、findの使用を遅くする主な問題は、見つかったすべてのディレクトリおよびファイルに対してchmownを呼び出すことであることを知っておくと役立ちます。使用する方がはるかに高速です。

find . -type f -exec chown <owner>:<group> {} +
find . -type d -exec chown <owner>:<group> {} +

chownが呼び出されるたびに、コマンドラインに収まるだけの数のパラメーターを指定します。

その変更は、chownのような再帰オプションが組み込まれていない他のコマンドでも機能します。そして、そのような再帰オプションが存在するが、それを使用できない状況(たとえば、chmodを使用していて、ディレクトリを変更したいだけの場合)でも機能します(速度を改善します)。

5
Anthon