我们有一个目录:
/家/的httpdocs /
在此目录中可能有目录的目录或子目录,或子目录的子目录,依此类推,包含XML文件(以.xml结尾的文件) - 我们不知道哪个目录包含xml文件和这些目录包含大量文件
我们要归档所有文件并将其从实际目录中删除,以便我们只包含上述目录中最近7天的xml文件。
有人向我提到,logrotate是一个很好的选择,这是最好的方法,如果是这样 - 我们将如何设置它?
如果不使用lot旋转,这可以编写脚本吗?这个脚本可以在生产时间运行还是会让系统陷入困境?
SAS
答案 0 :(得分:3)
find -name "*.xml" -mtime +7 -print0 | tar -cvzf yourArchive.tar.gz --remove-files --null --files-from -
将创建一个gzip压缩tar文件'yourArchive.tar.gz',其中包含当前目录中的所有* .xml文件以及在过去24 * 7小时内未更改的任何深度子目录以及将这些文件添加到tar档案文件被删除。
编辑:
这个脚本可以在生产时间运行,还是会陷入困境 系统
实际取决于您的系统。这确实会产生大量的I / O负载。如果您的生产系统使用大量I / O并且您没有碰巧拥有一个出色的I / O子系统(如使用光纤通道等连接的巨大raid系统),那么这将对您的性能产生一些明显的影响。这有多糟糕取决于更多细节。
如果系统负载是一个问题,那么你可以创建一个跟踪文件的小型数据库,也许使用inotify,它可以在更长的时间内在后台运行,而不会引起注意。
您也可以尝试使用renice
设置所提及进程的优先级,但由于问题是I / O而不是CPU(除非您的CPU糟透了,并且您的I / O由于某种原因非常好) ,这可能不会产生预期的效果。但接下来最好的选择是编写自己的脚本来爬行用sleeps修饰的文件树。这需要一些时间才能完成,但对生产系统的影响会更小。除非你真的有行动的压力,否则我不会推荐任何这个。
答案 1 :(得分:2)
使用find /home/httpdocs -name "*.xml" -mtime +7 -exec archive {} \;
其中archive
是一个存档和删除XML文件的程序。
答案 2 :(得分:0)
使用find
和cron作业执行此操作可能最简单。
find命令:
find /home/httpdocs -name \*.xml -ctime +7 -exec mv -b -t /path/to/backup/folder {} +
这会将/ home / httpdocs树中以.xml结尾的任何文件移动到您提供的备份文件夹,从而备份任何将被覆盖的文件(-b
)。
现在,要将其设置为cron作业,请以对httpdocs和备份文件夹(可能是root,crontab -e
)具有写权限的用户身份运行sudo crontab -e
。然后添加如下所示的行:
14 3 * * * find /home/httpdocs -name \*.xml -ctime +7 -exec mv -b -t /path/to/backup/folder {} +
这将在每天凌晨3:14运行命令(不同时间更改3和14)。您还可以将find
命令放入脚本中并运行它,只是为了缩短行。