題 如何將屬於一個用戶的所有文件更改為另一個用戶?


我正在尋找一個Linux命令,它可以將屬於給定用戶的所有文件的所有權(最好是在目標目錄中)更改為另一個指定用戶。

我的夢想命令看起來像這樣......

chuser -R --olduser tom --newuser jerry

要么

chuser -R --olduser 1066 --newuser 1492

這是我的場景......我有一個備份文件(.tgz),其中保留了用戶和組信息。它取自運行Apache和MySQL的Web服務器。備份中的文件來自整個系統,包含來自多個不同用戶和多個系統類型帳戶的文件,在新服務器上恢復時,設置不會丟失是關鍵。問題是計算機上正在恢復文件的用戶與備份文件中的用戶不匹配。例如,兩台計算機都有一個MySQL用戶,但它們具有不同的用戶ID,並且在屬於不同用戶的兩台計算機上都存在多個用戶ID。這意味著無法將新計算機上的用戶與舊計算機上的用戶同步。

我可以使用find命令找到所有用戶文件,如下所示...

find /decompressed-backup-dir -uid 1050

要么

find /decompressed-backup-dir -user tom

如果,正如我懷疑的那樣,沒有辦法用單個命令做我想要的事情那麼也許有一種方法可以將find命令的結果傳遞給另一個命令來處理所有權變更?

我可以使用PHP腳本執行此操作,但備份中有4GB和數万個文件,因此我不想使用PHP或Perl,但我會很高興能夠處理它的shell腳本。


33
2017-07-20 04:24


起源




答案:


就像是

find /decompressed-backup-dir -uid 1050 -exec chown newuser:newgroup {} +

24
2017-07-20 04:27



代替 -uid 我用了 -user - alexandre1985


我認為chown命令中的--from標誌可能是最簡單的方法。

chown --from=oldguy newguy * -R

53
2018-06-09 12:01



最好的解決方案,無需找到喜歡它 - Tobias Hagenbeek
最佳解決方案 - Karl Forner
在OS X上,您可以使用 brew install coreutils 和 gchown。 - jomo
這是正確和最好的答案。 - George M
我確認,它應該標記為最佳答案。 - Soullivaneuh


您可以使用 find正如其他人發布的那樣 chown

但是,您可能不必這樣做 tar 會照顧好你的事情。

例如,如果你做了一個 tar 上 machine A 用戶在哪裡 tom 是 uid 500 然後 untar 該文件 machine B 用戶在哪裡 tom 是 uid 505tar 將做正確的事情並使文件擁有 uid 505


6
2017-07-20 17:52



有趣的花絮,我沒有意識到這一點。所以tar不僅存儲uid,還存儲與uid相關的名稱。 - Nicholi
原始tar格式僅存儲數字信息。由POSIX在80年代後期引入的UStar格式添加了名稱。所以你現在遇到的任何焦油都是正確的。 - Ciclamino


添加到 SiteKickr回答chgrp 沒有 --from 參數,但你可以實現相同的 chown 通過省略用戶。

例:

chown -R --from=:currentgroup :newgroup /some/directory

5
2018-04-28 10:48





回答 設置用戶和組:

find /decompressed-backup-dir -uid 1050 -exec chown newuser:newgroup {} +

但是,如果您只想更改屬於某些用戶的文件組,則無法使用 chown (據我所知),而是使用 chgrp

find /decompressed-backup-dir -uid 1050 -exec chgrp newgroup {} +

並且只更改屬於您必須使用的某個組的文件組,例如:

find /decompressed-backup-dir -gid 400 -exec chgrp newgroup {} +

只是為了增加知識。


1
2018-03-11 08:59



實際上,你可以省略 newuser 部分。手冊頁說:“如果給出冒號和組,但省略了所有者,則只更改文件組;在這種情況下, chown 執行與...相同的功能 chgrp“。 - Ben Voigt


您可以使用 chown - R /directory/file

此命令將更改目錄的所有實例的權限 chown - R /directory


-2
2018-05-01 09:36