java使用hutools工具集,实现迁移centos中的文件,并且判断每一层目录的权限,看所有者是否是gnos用户,如果不是则变更所有者为gnos。文件和目录结构如下:/nas/ytdata/TM03/rawLog/2023/04/02/abc.txt
时间: 2023-10-19 12:17:05 浏览: 93
体育课评分系统 微信小程序+SSM毕业设计 源码+数据库+论文+启动教程.zip
以下是使用hutools工具集实现迁移并变更权限的Java代码:
```java
import cn.hutool.core.io.FileUtil;
import cn.hutool.core.util.StrUtil;
import java.io.File;
public class FileTransfer {
public static void main(String[] args) {
String srcPath = "/nas/ytdata/TM03/rawLog/2023/04/02/abc.txt";
String dstPath = "/mnt/data/abc.txt";
String owner = "gnos";
transferFile(srcPath, dstPath, owner);
}
public static void transferFile(String srcPath, String dstPath, String owner) {
File srcFile = new File(srcPath);
if (!srcFile.exists()) {
System.out.println("源文件不存在");
return;
}
if (!srcFile.isFile()) {
System.out.println("源文件不是普通文件");
return;
}
String srcDirPath = srcFile.getParent();
int startIndex = StrUtil.indexOfIgnoreCase(srcDirPath, "/rawLog/");
if (startIndex == -1) {
System.out.println("源文件不在/rawLog/目录下");
return;
}
String dstDirPath = "/mnt/data" + srcDirPath.substring(startIndex);
File dstDir = new File(dstDirPath);
if (!dstDir.exists()) {
FileUtil.mkdir(dstDirPath);
}
if (!dstDir.isDirectory()) {
System.out.println("目标路径不是目录");
return;
}
String dstFilePath = dstDirPath + "/" + srcFile.getName();
File dstFile = new File(dstFilePath);
if (dstFile.exists()) {
System.out.println("目标文件已存在");
return;
}
FileUtil.copy(srcFile, dstFile, true);
changeOwner(dstDir, owner);
}
public static void changeOwner(File dir, String owner) {
if (!dir.exists() || !dir.isDirectory()) {
return;
}
File[] files = dir.listFiles();
for (File file : files) {
if (file.isDirectory()) {
changeOwner(file, owner);
} else {
String fileOwner = FileUtil.getOwner(file).getUser();
if (!owner.equals(fileOwner)) {
FileUtil.chown(file, owner);
}
}
}
}
}
```
其中,`transferFile`方法中,首先判断源文件是否存在,是否是普通文件,以及是否在`/rawLog/`目录下。如果满足条件,则计算目标路径,创建目标目录,复制文件到目标路径,并调用`changeOwner`方法变更所有者。`changeOwner`方法递归遍历目录下的所有文件和子目录,并判断每个文件的所有者是否为`gnos`,如果不是则变更所有者。
阅读全文