次のコマンドを実行しようとしています。
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. {} \;