Find

遞歸更改文件所有權而不會出錯

  • December 12, 2014

在更改使用者的 UID 後,我正在嘗試編寫一個腳本來修復特定使用者擁有的所有文件的所有權。

目前,我執行:

chown -Rhc --from=${OLD_UID} ${NEW_UID} /
chown -Rhc --from=:${OLD_UID} :${NEW_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我的理論是找到所有文件的程序會選擇自己的程序,然後在嘗試訪問它時該程序不存在。

我可以丟棄命令中的返回程式碼,但我不希望這樣,以防我最終忽略了真正的錯誤。

誰能建議一種不會報告錯誤錯誤的替代方法?

您可以使用find, 並告訴它不要下降到其他文件系統(這應該會阻止它訪問虛擬文件系統,如proc,sys等):

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

這可能效率不高。

過濾掉虛擬文件的另一種方法是在其他地方重新掛載根文件系統:

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

並繼續chown執行/tmp/chroot

引用自:https://unix.stackexchange.com/questions/173938