Shell-Script

為 10+TB 目錄上的 10 個使用者選擇性地更改所有者 UID

  • August 6, 2017

我有一個 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當然可以找到文件;但這實際上只是一個副作用。

— Unix 電動工具

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