に関してはxargs、提案どおりに使用できますが-r、BSDではサポートされていませんxargs。
したがって、回避策として、次のような追加の一時ファイルを渡すことができます。
find /mydir -type f -name "*.txt" -print0 | xargs -0 chown root $(mktemp)
または、そのstderrをnull(2> /dev/null)にリダイレクトします。例:
find /mydir -type f -name "*.txt" -print0 | xargs -0 chown root 2> /dev/null || true
もう1つの優れたアプローチは、whileループを使用して見つかったファイルを反復処理することです。
find /mydir -type f -name "*.txt" -print0 | while IFS= read -r -d '' file; do
chown -v root "$file"
done
参照:MacOSXでxargsの空の結果を無視する
また、権限を変更する方法は優れていないため、お勧めできません。間違いなく、lsコマンドの出力を解析するべきではありません(「 lsの出力を解析すべきでない理由」を参照)。特にrootでコマンドを実行している場合、ファイルはシェルによって解釈される可能性のある特殊文字で構成されているか、ファイルの周囲/にスペース文字があると想像される可能性があるため、結果はひどいものになる可能性があります。
したがって、アプローチを変更し、find代わりにコマンドを使用する必要があります。
find /mydir -type f -name "*.txt" -execdir chown root {} ';'