2010-01-28 71 views

回答

3

通常删除远程计算机上的3天大的文件,你可以使用:

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

或类似的东西(即可能还有其他限制子句如-type f用于常规文件或-maxdepth 0仅用于当前目录,不包含子目录)。 -mtime +3只能获得修改日期为3天或更长的文件。

在您的系统上执行man find了解详细信息。无论Solaris具有与GNU相同的功能,我都不知道。它可能更有限(或更好)。


更新:请在你崇拜上帝赐予的名字,请首先测试命令echo,而不是rm。我把你的文件的破坏没有责任,如果你信任的“网上一些随机的家伙谁可能会或可能不会有你的最佳利益在心脏” :-)


而且,任何人跳之前的建议并且因为我没有使用xargs(或更好的情况下,find -print0xargs -0哪里可用),我知道。但它与手边的具体问题无关。 OP可以询问另一个问题是否和何时find -exec的性能是一个问题。


如果你有在它的日期特定的文件格式(如您在您的评论表示),您可以实际上使用mdelftp下。请看下面的代码:

# 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更容易,但如果该途径不可用,我将提供此选项。

+0

@paxdiablo 您指定的命令用于删除本地计算机中的文件,而我需要使用ftp在远程计算机上删除它们。 – flash 2010-01-28 08:08:30

+3

通过ftp,del或mdel无法执行此操作。如果文件名中包含日期,你可以通过删除特定的文件来完成,否则你将不得不采取某种“网站管理”技巧。但是我担心你是否被允许这样做,因为它不是很安全。你为什么不直接在目标框上运行一个cron作业,这个工作是为你做的(用我提供的命令)?这似乎更容易解决。 – paxdiablo 2010-01-28 08:34:33

+0

嗯,这似乎是一个很好的解决方案,我将与之合作..非常感谢paxdiablo !!! – flash 2010-01-28 09:28:10

相关问题