'-o' および '-exec chown' を使用した 'find' が期待どおりに動作しない

'-o' および '-exec chown' を使用した 'find' が期待どおりに動作しない

以下を実行しようとしています:

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. {} \;

ファイルは期待どおりに更新されました。man ページには次のように記載されています。

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. {} \;

重複を避けるには、括弧を使用して 2 つのテスト式を一緒に評価します。

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

関連情報