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

本文介绍如何使用Java调用Linux shell命令来删除特定目录下创建时间超过两小时的文件。重点介绍了find命令的使用方法及其参数,如-type、-cmin等,并解释了在Java中正确传递命令的方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

前几天有个需求是在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()函数也接受字符串作为参数,也可以把指令划分。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值