Shell-Script
為 10+TB 目錄上的 10 個使用者選擇性地更改所有者 UID
我有一個 10+ TB NFS /home 用於 100+ 個使用者和公用文件夾。我需要更改其中 10 個使用者的使用者名和 UID。起初,我正在考慮執行以下內容:
find /home -uid 812 -exec chown NEWUSER {} \;
現在,這個問題是它會遍歷我所有的 10TB 數據,並將它找到的任何帶有 uid 812 的文件更改為 NEWUSER,這正是我想要的。但這需要相當長的時間,而且只會為那個使用者做;然後我將不得不為其他 9 個使用者再次執行該命令,將它從相當長的時間變成相當長的時間 * 9。
除了我不喜歡編寫腳本這一事實之外,我想腳本會成為這裡的朋友,但我不知道從哪裡開始。我想使用該
find
命令並檢查 /home 中的所有文件。然後:IF FILEOWNER IS 813 then NEWOWNER IS NEWUSER1 IF FILEOWNER IS 814 then NEWOWNER IS NEWUSER2
… 等等。
您是否認為有辦法做到這一點,這樣我就不必掃描 10 GB 的數據 10 次——只需掃描一次?
使用
find
. _ _find /home ! -type l \( \ -uid 812 -exec chown NEWUSER {} + \ -o -uid 813 -exec chown ANOTHER {} + \ -o -uid 814 -exec chown SOMEONE {} + \ -o -uid 815 -exec chown SOMEGUY {} + \)
一種目錄結構遍歷。一切都
chown
完成了。我們排除符號連結,否則
chown
將適用於符號連結的目標。在某些系統上,您可以使用 更改符號連結的所有者chown -h
。在那些上,您可以添加-h
和刪除! -type l
.請注意,如果任何文件是
setuid
,這將搞砸。您也可以使用find
.
find
的業務是評估表達式——而不是定位文件。是的,find
當然可以找到文件;但這實際上只是一個副作用。