Find
遞歸更改文件所有權而不會出錯
在更改使用者的 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
。