脚本功能:将指定目录多少天前的文件移动到目标目录并保持结构不变
应用场景:用于移走服务器中无需保留的老旧数据(笔者是ftp服务器环境)
使用说明:修改脚本中的源目录和目标目录且修改移动多少天前的数据
脚本代码:
#!/bin/bash
wdir=
"/ftp"
bdir=
"/mvbackup/ftp"
fl=
"/tmp/filelist"
okl=
"/tmp/oklist"
erl=
"/tmp/errlist"
dl=
"/tmp/dirlist"
mvlog=
"/var/log/mvfile.log"
mdlog=
"/var/log/mkdir.log"
cd
$wdir
if
[ -f $fl ];
then
rm
-f $fl
fi
find
-mtime +300 -
type
f |
grep
-
v
"\/\."
> $fl
if
[ -f $okl ];
then
rm
-f $okl
fi
if
[ -f $erl ];
then
rm
-f $erl
fi
if
[ ! -f $fl ];
then
echo
stop:1
exit
1
fi
oldIFS=$IFS
IFS=$
'\n'
for
i
in
$(
cat
$fl)
do
if
[ -f $i ];
then
echo
"$i"
>> $okl
else
echo
"$i"
>> $erl
fi
done
IFS=$oldIFS
if
[ -f $dl ];
then
rm
-f $dl
fi
if
[ ! -f $okl ];
then
echo
stop:2
exit
2
fi
cat
$okl |
awk
-F
'/'
'{$1="";NF-=1;OFS="/";print}'
|
sort
-u > $dl
if
[ ! -f $dl ];
then
echo
stop:3
exit
3
fi
oldIFS=$IFS
IFS=$
'\n'
for
i
in
$(
cat
$dl)
do
if
[ ! -d
"$bdir$i"
];
then
mkdir
-p
"$bdir$i"
if
[ ! $? = 0 ];
then
echo
"$bdir$i"
>> $mdlog
fi
fi
done
IFS=$oldIFS
if
[ ! -f $okl ];
then
echo
stop:4
exit
4
fi
oldIFS=$IFS
IFS=$
'\n'
for
i
in
$(
cat
$okl)
do
if
[ -f
"$i"
];
then
j=
"$bdir$(echo $i | awk -F'/' '{$1="
";NF-=1;OFS="
/
";print}')"
fi
if
[ -d
"$j"
];
then
echo
s:
"$i"
echo
d:
"$j"
mv
-f
"$i"
"$j"
if
[ ! $? = 0 ];
then
echo
"$i"
>> $mvlog
fi
fi
done
IFS=$oldIFS
|