我正在创建一些脚本来创建一些表的基本副本,并将这些文件的ftp创建到远程计算机。还有一个要求删除在转储这些文件之前,远程计算机上的3days旧文件。如何在shell脚本中使用ftp删除3天的旧文件(Solaris操作系统)
我需要帮助以书面KSH使用FTP
我正在创建一些脚本来创建一些表的基本副本,并将这些文件的ftp创建到远程计算机。还有一个要求删除在转储这些文件之前,远程计算机上的3days旧文件。如何在shell脚本中使用ftp删除3天的旧文件(Solaris操作系统)
我需要帮助以书面KSH使用FTP
通常删除远程计算机上的3天大的文件,你可以使用:
find . -mtime +3 -exec rm {} ';'
或类似的东西(即可能还有其他限制子句如-type f
用于常规文件或-maxdepth 0
仅用于当前目录,不包含子目录)。 -mtime +3
只能获得修改日期为3天或更长的文件。
在您的系统上执行man find
了解详细信息。无论Solaris具有与GNU相同的功能,我都不知道。它可能更有限(或更好)。
更新:请在你崇拜上帝赐予的名字,请首先测试命令echo
,而不是rm
。我把你的文件的破坏没有责任,如果你信任的“网上一些随机的家伙谁可能会或可能不会有你的最佳利益在心脏” :-)
而且,任何人跳之前的建议并且因为我没有使用xargs
(或更好的情况下,find -print0
与xargs -0
哪里可用),我知道。但它与手边的具体问题无关。 OP可以询问另一个问题是否和何时find -exec
的性能是一个问题。
如果你有在它的日期特定的文件格式(如您在您的评论表示),您可以实际上使用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
更容易,但如果该途径不可用,我将提供此选项。
@paxdiablo 您指定的命令用于删除本地计算机中的文件,而我需要使用ftp在远程计算机上删除它们。 – flash 2010-01-28 08:08:30
通过ftp,del或mdel无法执行此操作。如果文件名中包含日期,你可以通过删除特定的文件来完成,否则你将不得不采取某种“网站管理”技巧。但是我担心你是否被允许这样做,因为它不是很安全。你为什么不直接在目标框上运行一个cron作业,这个工作是为你做的(用我提供的命令)?这似乎更容易解决。 – paxdiablo 2010-01-28 08:34:33
嗯,这似乎是一个很好的解决方案,我将与之合作..非常感谢paxdiablo !!! – flash 2010-01-28 09:28:10