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进行备分.
自己没啥分,分少点,但应该会者不难吧. 展开
1.A>200M时备份成A.yyyyMMdd,同时删除A;
2.B>100M时备份成B.yyyyMMdd,同时删除B;
3.C>50M时备份成C.yyyyMMdd,同时删除C;
类推,每个日志的到多少进行备分的大小要求写在配置文件中,但是并不是每个日志文件都会配置备份的大小,所以还得搜索配置文件,如果没有配置那么就按超过20M进行备分.
自己没啥分,分少点,但应该会者不难吧. 展开
展开全部
用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};
}
}
}
配置文件: /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};
}
}
}
展开全部
#!/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
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应该挺不错的,加油。
本回答被网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询
广告 您可能关注的内容 |