Java代码
private void autoDeleteCdr(String cdrTimer) {
Integer val = Integer.valueOf(cdrTimer) * 60;
String delete = "find {0} -maxdepth 1 -type f -mmin +{1} -exec rm -f {2} \\;";
//将参数传入进去
delete = MessageFormat.format(delete, filePath, String.valueOf(val),"{}");
String[] cmd = new String[]{"/bin/sh","-c",delete};
try {
Runtime.getRuntime().exec(cmd);
} catch (IOException e) {
logger.error(e.getMessage());
}
}
注意
命令的拼接一定要用MessageFormat.format(String pattern, Object ... arguments)
进行参数的传递,不然生成的命令串虽然正确但是Runtime.getRuntime().exec()
执行并不生效
命令解析
find /home/test -maxdepth 1 -type f -mmin +10 -exec rm -f {} \;
在/home/test 目录下,深度为1,查找10分钟之前的修改普通文件并删除
-maxdepth
查找深度
-type
文件类型
b 块设备文件
d 目录
c 字符设备文件
p 管道文件
l 符号链接文件
f 普通文件
-mmin +n
按照文件的更改时间来查找文件(从此时开始算,查找在10分钟之前修改的文件)
-amin -n 查找系统中最后N+-分钟访问的文件
-atime -n 查找系统中最后n*24小时访问的文件
-cmin -n 查找系统中最后N分钟被改变文件状态的文件
-ctime -n 查找系统中最后n*24小时被改变文件状态的文件
-mmin -n 查找系统中最后N分钟被改变文件数据的文件
-mtime -n 查找系统中最后n*24小时被改变文件数据的文件
-amin +n 查找系统中N+-分钟之前访问的文件
-atime +n 查找系统中n*24小时之前访问的文件
-cmin +n 查找系统中N分钟之前被改变文件状态的文件
-ctime +n 查找系统中n*24小时之前被改变文件状态的文件
-mmin +n 查找系统中N分钟之前被改变文件数据的文件
-mtime +n 查找系统中n*24小时之前被改变文件数据的文件
+n 时间之前
-n 时间之后
min 分钟
time 天(24小时)
a 访问的
c 更改状态
m 更改数据
-exec
find命令对匹配的文件执行该参数所给出的shell命令。
-print: find命令将匹配的文件输出到标准输出。
-exec: find命令对匹配的文件执行该参数所给出的shell命令。相应命令的形式为'command' { } \;,注意{ }和\;之间的空格。
-ok: 和-exec的作用相同,只不过以一种更为安全的模式来执行该参数所给出的shell命令,在执行每一个命令之前,都会给出提示,让用户来确定是否执行。