Java Runtime.getRuntime.exec() 与linux shell find

来源:互联网 发布:软件发明专利怎么写 编辑:程序博客网 时间:2024/06/05 20:51

前几天有个需求是在Java工程里面执行linux shell指令,删除过期的文件。

需要执行linux的find指令,指令是要删除某个目录下面创建时间超过两个小时的文件

指令如下:

find filepath -type f -cmin +120 -exec rm -f {} \;

-type 指定文件类型

-cmin指定文件创建时间,在120分钟之前的将会被过滤,相关参数还有-mmin -ctime -mtime用法大同小异,分别是文件修改时间,从名字也可以看出是time与min单位不同

-exec是指对过滤所得采取的动作。


本以为把"find filepath -type f -cmin +120 -exec rm -f {} \\;"作为参数直接传给Runtime的exec()即可,结果发现报错,报-exec 没有相关参数,后来经过一晚上的折腾,原来Java执行linux shell指令跟shell下面直接执行是有区别的,shell下面{}后面“\”的意思是对“;”进行转义,防止shell把";"作为指令的一部分执行,实际上";"只是一个指令分隔符,表示一条指令的结束。


明白了问题就好了,只需要把java里面的参数改为"find filepath -type f -cmin +120 -exec rm -f {} ;"即可,当然exec()函数也接受字符串作为参数,也可以把指令划分。

0 0
原创粉丝点击