如何在shell脚本中使用ftp删除3天的旧文件(Solaris OS)

时间:2010-01-28 07:38:24

标签: unix ftp shell solaris

我正在编写一个脚本来创建基本上是某些表的副本的文件,并将这些文件ftp到远程机器。还有一个要求是在转储这些文件之前删除远程机器上的3天旧文件。

我需要帮助编写ksh,以便使用ftp

删除远程计算机上的3天旧文件

1 个答案:

答案 0 :(得分:3)

通常,您会使用:

find . -mtime +3 -exec rm {} ';'

或类似的东西(即,对于常规文件可能存在其他限制性条款,例如-type f,或者仅-maxdepth 0来执行当前目录,没有子目录)。 -mtime +3仅获取修改日期为3天或更长的文件。

在您的系统上执行man find以获取完整详细信息。 Solaris是否具有与GNU相同的功能,我不知道。它可能更有限(或更好)。


更新:请以您所崇拜的众神为名,请先使用echo代替rm测试命令。如果您信任“网上随机的人可能会或可能不会将您的最佳利益放在心上”的建议,我对您的文件销毁不承担任何责任: - )


而且,在任何人跳入并指责我没有使用xargs(或者,更好的是find -print0xargs -0可用的地方)之前,我知道。但这与手头的具体问题无关。如果find -exec的性能出现问题,OP可以询问另一个问题。


如果您的日期中包含特定的文件格式(正如您在评论中指明的那样),那么可以实际使用mdel下的ftp。请考虑以下脚本:

# The prefix and suffix of files to delete.
prefix='*_'
suffix='-i.tbl'

# Create FTP script file.
rm -rf temp.ftp
echo "user pax pax_password" >>temp.ftp
echo "cd /my/directory" >>temp.ftp
echo "prompt" >>temp.ftp

# Get current date.
y=$(date +%Y)
m=$(date +%m)
d=$(date +%d)
((lasty = y - 1))
((lastm = m - 1))

# If past Jan 3, delete all of previous year.
if [[ $m -gt 1 || $d -gt 3 ]] ; then
    echo "mdel ${prefix}${lasty}????${suffix}" >>temp.ftp
fi

# If past Jan and past the third, delete all of previous month.
if [[ $m -gt 1 && $d -gt 3 ]] ; then
    if [[ ${lastm} -lt 10 ]] ; then
        echo "mdel ${prefix}${y}0${lastm}??${suffix}" >>temp.ftp
    else
        echo "mdel ${prefix}${y}${lastm}??${suffix}" >>temp.ftp
    fi
fi

# If past the third, delete current month more than three days old.
if [[ $d -gt 3 ]] ; then
    ((d = d - 3))
    if [[ ${m} -lt 10 ]] ; then
        m="0${m}"
    fi
    while [[ ${d} -gt 0 ]] ; do
        if [[ ${d} -lt 10 ]] ; then
            echo "mdel ${prefix}${y}${m}0${d}${suffix}" >>temp.ftp
        else
            echo "mdel ${prefix}${y}${m}${d}${suffix}" >>temp.ftp
        fi
        ((d = d - 1))
    done
fi

# Finalise script and run it.
echo "bye" >>temp.ftp
ftp -n mymachine.com <temp.ftp
rm -rf temp.ftp

除了轻微的烦恼之外,您可能会在月份边界上留下长达六天的文件,这可以满足您的需求。当然,如果这非常重要,您可以使处理月边界的代码更加智能化。

每天只需在您的包装盒上运行此脚本,它将使用标准ftp工具清除目标文件夹上的文件。我仍然认为在服务器盒上运行find更容易,但如果该途径不可用,我将提供此选项。