Linux shell脚本用于循环错误

时间:2016-08-01 08:19:10

标签: linux shell

我正在尝试创建一个for循环来删除超过15天的日志文件。以下是我的剧本:

#!/bin/sh
path="/home/test"

logpath="$path/logs"
for logfile in `find $logpath -mtime +14 -type f -name *.log`
do
    echo "Deleting Log File: " $logfile
    rm -rf $logfile
done

它不断抛出错误:

find: paths must precede expression
Usage: find [-H] [-L] [-P] [path...] [expression]

有什么想法吗?

3 个答案:

答案 0 :(得分:4)

请尝试这个 - 添加单引号

#!/bin/sh
path="/home/test"

logpath="$path/logs"
for logfile in `find $logpath -mtime +14 -type f -name '*.log'`
do
    echo "Deleting Log File: " $logfile
    rm -rf $logfile
done

答案 1 :(得分:2)

您可以使用exec的{​​{1}}参数来摆脱for循环:

find

或者像@Patryk Obara所说:

find $logpath -mtime +14 -type f -name '*.log' -exec rm -rf {} \;

隐式启用find $logpath -mtime +14 -type f -name '*.log' -delete

你可以这样测试:

-depth

答案 2 :(得分:0)

Logrotate是这类工作的更好选择,这里是它的文档链接 - http://www.linuxcommand.org/man_pages/logrotate8.html