脚本功能:将指定目录多少天前的文件移动到目标目录并保持结构不变
应用场景:用于移走服务器中无需保留的老旧数据(笔者是ftp服务器环境)
使用说明:修改脚本中的源目录和目标目录且修改移动多少天前的数据
脚本代码:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
|
#!/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"
#enter working(source) director
cd
$wdir
#create source file list
if
[ -f $fl ];
then
rm
-f $fl
fi
find
-mtime +300 -
type
f |
grep
-
v
"\/\."
> $fl
# ^300天前的数据
#filter source file list
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
#create traget director list
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
#create traget director
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
#echo $bdir$i
fi
done
IFS=$oldIFS
#move file to traget folder
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
|
本文转自 tanzhenchao 51CTO博客,原文链接:http://blog.51cto.com/cmdschool/1843962,如需转载请自行联系原作者