linux系统中,写一个shell对指定目录下的文件大于特定值时自动进行备份.加急!

比如在tmp目录下存在A,B,C三个日志文件或更多的日志文件,执行一个脚本需要满足以下条:1.A>200M时备份成A.yyyyMMdd,同时删除A;2.B>100M时备份... 比如在tmp目录下存在A,B,C三个日志文件或更多的日志文件,执行一个脚本需要满足以下条:
1.A>200M时备份成A.yyyyMMdd,同时删除A;
2.B>100M时备份成B.yyyyMMdd,同时删除B;
3.C>50M时备份成C.yyyyMMdd,同时删除C;
类推,每个日志的到多少进行备分的大小要求写在配置文件中,但是并不是每个日志文件都会配置备份的大小,所以还得搜索配置文件,如果没有配置那么就按超过20M进行备分.

自己没啥分,分少点,但应该会者不难吧.
展开
 我来答
动力不强
2013-05-23 · TA获得超过554个赞
知道小有建树答主
回答量:445
采纳率:0%
帮助的人:372万
展开全部
用perl实现较容易

配置文件: /xxx/backup.conf
A 200
B 100
C 50

脚本: /xxx/backup.pl
#!/usr/bin/perl
use strict;
use File::Basename;

# 配置文件名
my $config_file = "/xxx/backup.conf";
# 源目录
my $src_dir = "/tmp";
#备份目录
my $backup_dir = "/xxx/backup";
#当前日期
my $today = `date +%Y%m%d`;
$today =~ s/\n//;

# 读取配置文件

my %conf;
open CONFIG, "<", $config_file;
while(<CONFIG>) {
my($fname, $fsize) = split;
$conf{$fname} = $fsize * 1024 * 1024;
}
close(CONFIG);

# 扫描源目录,附合条件则进行备份

my @files = <$src_dir/*>;
foreach my $file (@files) {
my $file_basename = basename($file);
if ( -f $file && $conf{$file_basename}) {
if( -s $file > $conf{$file_basename} ) {
system "cp ${file} ${backup_dir}/${file_basename}.${today}";
if($?) {
#遇到错误就退出
die "copy ${file} to ${backup_dir}/${file_basename}.${today} failed!\n";
}
unlink ${file};
}
}
}
ppkingpping
2013-05-22 · TA获得超过894个赞
知道小有建树答主
回答量:705
采纳率:0%
帮助的人:622万
展开全部
#!/bin/sh
A=`du -hs /tmp/A | grep -o "[[:digit:]]*"`
B=`du -hs /tmp/B | gre
if [ $A -gt 100 ]; then
tar -cvf B.$date.tar /tmp/B
rm -rf /tmp/B
fi
if [ $A -gt 50 ]; then
tar -cvf C.$date.tar /tmp/C
rm -rf /tmp/C
fi
for file in `ls /tmp`
do
size=`du -hs $file | grep -o "[[:digit:]]*"`
if [ $size -gt 20 ];then
追问
可能是表达的不对,需要的是一个通用的,就是在执行脚本时/tmp/下的所有大于特定文件大小的(比如100M)日志都做备份,备份成各自文件名+时间(yyyyMMddHHmmss)后缀。完美一点就是对于特定的几个日志能根据配置文件的大小进行备份。看你写shell应该挺不错的,加油。
本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式