「-o」と「-exec chown」を使用した「検索」が期待どおりに機能しません。

「-o」と「-exec chown」を使用した「検索」が期待どおりに機能しません。

次のコマンドを実行しようとしています。

find . -user user_name -o -group user_group -exec chown root. {} \;

ただし、コマンドを実行した後、ファイルの所有権は変更されません。 -execなしで実行すると、正しく変更したいすべてのファイルのリストが生成されます。

私が使用している場合:

find . -user user_name -exec chown root. {} \; find . -group user_group -exec chown root. {} \;

ファイルが期待どおりに更新されました。マニュアルページには次のものがあります。

expr1 -o expr2
          Or; expr2 is not evaluated if expr1 is true.


expr1 -or expr2
          Same as expr1 -o expr2, but not POSIX compliant.

ただし、これらのファイルの所有者はですuser_name:user_group。ここで何か誤解がない限り、最初のケースはtrueと評価され、execコマンドを実行する必要があります。なぜこれが起こるのか説明できますか?

システム情報が必要な場合:

find(GNU findutils) 4.4.2 CentOS バージョン 6.8(最終バージョン)

ベストアンサー1

構文の論理演算子は優先順位が低く、find例ではおよびで-o除算されます。-user user_name-group user_group -exec chown root. {} \;

以下を確認してください。

find . -user user_name -exec chown root. {} \; -o -group user_group -exec chown root. {} \;

重複を避けるために、括弧を使用して両方のテスト式を一緒に評価してください。

find . \( -user user_name -o -group user_group \) -exec chown root. {} \;

おすすめ記事