エラーなしでファイルの所有権を繰り返し変更する

エラーなしでファイルの所有権を繰り返し変更する

ユーザーのUIDを変更した後、特定のユーザーが所有するすべてのファイルの所有権を変更するスクリプトを作成しようとしています。

現在、以下を実行します。

chown -Rhc --from=${OLD_UID} ${NEW_UID} /
chown -Rhc --from=:${OLD_UID} :${NEW_UID} /

変更したばかりのユーザーの古いUIDと新しいUIDはどこにありますOLD_UIDか?NEW_UID

目的の効果がありますが、次のエラーのため、常に戻りコード1で終了します。

chown: cannot access ‘/proc/1103/task/1103/fd/4’: No such file or directory
chown: cannot access ‘/proc/1103/task/1103/fdinfo/4’: No such file or directory
chown: cannot access ‘/proc/1103/fd/4’: No such file or directory
chown: cannot access ‘/proc/1103/fdinfo/4’: No such file or directory

私の理論は、すべてのファイルを検索するプロセスが独自のプロセスを選択してアクセスしよchownうとすると、そのプロセスが存在しないことです。

コマンドの戻りコードを削除することができますが、実際のエラーを無視する場合はそうしたくありません。

偽のエラーを報告しない代替案を提案できる人はいますか?

答え1

を使用して他のファイルシステムに入らないように指示できます(これにより、仮想findファイルシステムにアクセスできなくなります)。procsys

find / -xdev -uid ${OLD_UID} -execdir chown ${NEW_UID} {} +

これは効率的ではないかもしれません。

仮想ファイルをフィルタリングする別の方法は、ルートファイルシステムを別の場所に再マウントすることです。

mkdir /tmp/chroot
mount -o .. -t .. /dev/... /tmp/chroot

そしてchown走り続ける/tmp/chroot

関連情報