程序无法移动文件

时间:2012-11-01 18:00:45

标签: unix ksh

我正在尝试将文件从一个位置移动到另一个目录...所以我的程序将读取Log_Deleter,使用每行中给出的参数来删除该文件。 当我执行文件时,它似乎运行正常(没有错误)但文件的非移动...我不知道为什么它不移动文件也不显示任何错误... 有人可以确定错误吗?

我的尝试:

#!/bin/ksh

while read -r line ; do
    v=$line
    set -- $v
    cd /
    $(find "$1" -type f -name "$2" -mtime +"$3" -exec mv {} "$4" \;)
done < Log_Deleter.txt

Log_Deleter.txt

/usr/IBM/WebSphere/AppServer/profiles/AppSrvSIT1/logs/Server1 'SystemOut_*' 5 /backup/Abackuptest1
/usr/IBM/WebSphere/AppServer/profiles/AppSrvSIT1/logs/Server2 'SystemOut_*' 5 /backup/Abackuptest2

感谢您的帮助!

2 个答案:

答案 0 :(得分:1)

查找正在查找名称中包含文字'的文件。在调用find之前,您需要从$2中删除单引号。尝试:

#!/bin/ksh

while read -r path name mtime dest ; do
    name=$( echo $name | tr -d "'" )
    find "$path" -type f -name "$name" -mtime +"$mtime" -exec mv {} "$dest" \;
done < Log_Deleter.txt

答案 1 :(得分:1)

问题是您正在尝试匹配名称实际上包含单引号的文件。

除了其他问题之外,我认为一旦你从Log_Deleter.txt中取出引号,你的脚本就可能正常工作。

引号仅在shell解析命令输入时才有意义。这不是read内置的功能。即使在读取命令输入时,一旦引号进入变量,它们将永远保留在那里,除非通过eval.重新读取shell CLI层

shell并不完全是宏处理器。它是一个复杂的混合体,有点CLI,一点点编程语言和一点点宏处理器。

而且,谈到eval,没有必要将find包装在类似eval的构造中。简化您的脚本以直接运行find,您会发现它更容易调试和理解。