簡體   English   中英

使用java.nio.Files更改Linux下的文件所有者組

[英]Change file owner group under Linux with java.nio.Files

我有一台Linux服務器,我在Java上為我服務器上的多個網站運行圖像大小調整作業。 網站文件歸不同的OS用戶/組所有。 新創建的縮略圖/預覽由運行調整大小作業的用戶擁有。 現在,我正在調整如何在我的調整大小程序中更改新創建的預覽/縮略圖的文件所有者,並發現了這個:

java.nio.file.Files.setOwner(Path path, UserPrincipal owner);

如果它是Windows,這將真正解決我的問題,但由於Linux文件有一個用戶和一個組作為所有者我有點麻煩。 不幸的是,給定的方法似乎只改變了文件的用戶所有權。 組所有權保留在運行Java調整大小作業的用戶組中。

這些網站由不同的群組擁有,因此將我的調整大小作業用戶添加到一個群組是不可取的。 我還想避免使用ProcessBuilder進行系統調用並在我的文件上執行chown

我需要指出創建的文件(預覽/縮略圖)可以通過網站訪問,更改組所有權並不是關鍵任務,但我希望它盡可能干凈。

有關如何僅使用Java更改Linux中文件的組所有權的任何建議?

謝謝吉姆加里森指出我正確的方向。 這里的代碼,最終解決了我的問題。

檢索文件的組所有者

File originalFile = new File("original.jpg"); // just as an example
GroupPrincipal group = Files.readAttributes(originalFile.toPath(), PosixFileAttributes.class, LinkOption.NOFOLLOW_LINKS).group();

設置文件的組所有者

File targetFile = new File("target.jpg");
Files.getFileAttributeView(targetFile.toPath(), PosixFileAttributeView.class, LinkOption.NOFOLLOW_LINKS).setGroup(group);

我錯過了一個完整的解決方案,它來了(其他答案和評論的組合):

Path p = your file's Path;
String group = "GROUP_NAME";
UserPrincipalLookupService lookupService = FileSystems.getDefault()
            .getUserPrincipalLookupService();
GroupPrincipal group = lookupService.lookupPrincipalByGroupName(group);
Files.getFileAttributeView(p, PosixFileAttributeView.class,
            LinkOption.NOFOLLOW_LINKS).setGroup(group);

請注意,只有文件的所有者才能更改其組,並且只能更改為他所屬的組...

看一下包java.nio.file.attributes和類PosixFilePermissions 您可以在此處理組權限。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM