腳本功能:将指定目錄多少天前的檔案移動到目标目錄并保持結構不變
應用場景:用于移走伺服器中無需保留的老舊資料(筆者是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
<code>#!/bin/bash</code>
<code>wdir=</code><code>"/ftp"</code> <code>#源目錄</code>
<code>bdir=</code><code>"/mvbackup/ftp"</code> <code>#目标目錄</code>
<code>fl=</code><code>"/tmp/filelist"</code>
<code>okl=</code><code>"/tmp/oklist"</code>
<code>erl=</code><code>"/tmp/errlist"</code>
<code>dl=</code><code>"/tmp/dirlist"</code>
<code>mvlog=</code><code>"/var/log/mvfile.log"</code>
<code>mdlog=</code><code>"/var/log/mkdir.log"</code>
<code>#enter working(source) director</code>
<code>cd</code> <code>$wdir</code>
<code>#create source file list</code>
<code>if</code> <code>[ -f $fl ]; </code><code>then</code>
<code> </code><code>rm</code> <code>-f $fl</code>
<code>fi</code>
<code>find</code> <code>-mtime +300 -</code><code>type</code> <code>f | </code><code>grep</code> <code>-</code><code>v</code> <code>"\/\."</code><code>> $fl</code>
<code># ^300天前的資料</code>
<code>#filter source file list</code>
<code>if</code> <code>[ -f $okl ]; </code><code>then</code>
<code> </code><code>rm</code> <code>-f $okl</code>
<code>if</code> <code>[ -f $erl ]; </code><code>then</code>
<code> </code><code>rm</code> <code>-f $erl</code>
<code>if</code> <code>[ ! -f $fl ]; </code><code>then</code>
<code> </code><code>echo</code> <code>stop:1</code>
<code> </code><code>exit</code> <code>1</code>
<code>oldIFS=$IFS</code>
<code>IFS=$</code><code>'\n'</code>
<code>for</code> <code>i </code><code>in</code> <code>$(</code><code>cat</code> <code>$fl)</code>
<code>do</code>
<code> </code><code>if</code> <code>[ -f $i ]; </code><code>then</code>
<code> </code><code>echo</code> <code>"$i"</code> <code>>> $okl</code>
<code> </code><code>else</code>
<code> </code><code>echo</code> <code>"$i"</code> <code>>> $erl</code>
<code> </code><code>fi</code>
<code>done</code>
<code>IFS=$oldIFS</code>
<code>#create traget director list</code>
<code>if</code> <code>[ -f $dl ]; </code><code>then</code>
<code> </code><code>rm</code> <code>-f $dl</code>
<code>if</code> <code>[ ! -f $okl ]; </code><code>then</code>
<code> </code><code>echo</code> <code>stop:2</code>
<code> </code><code>exit</code> <code>2</code>
<code>cat</code> <code>$okl | </code><code>awk</code> <code>-F</code><code>'/'</code> <code>'{$1="";NF-=1;OFS="/";print}'</code> <code>| </code><code>sort</code> <code>-u > $dl</code>
<code>#create traget director</code>
<code>if</code> <code>[ ! -f $dl ]; </code><code>then</code>
<code> </code><code>echo</code> <code>stop:3</code>
<code> </code><code>exit</code> <code>3</code>
<code>for</code> <code>i </code><code>in</code> <code>$(</code><code>cat</code> <code>$dl)</code>
<code> </code><code>if</code> <code>[ ! -d </code><code>"$bdir$i"</code> <code>]; </code><code>then</code>
<code> </code><code>mkdir</code> <code>-p </code><code>"$bdir$i"</code>
<code> </code><code>if</code> <code>[ ! $? = 0 ]; </code><code>then</code>
<code> </code><code>echo</code> <code>"$bdir$i"</code> <code>>> $mdlog</code>
<code> </code><code>fi</code>
<code> </code><code>#echo $bdir$i</code>
<code>#move file to traget folder</code>
<code> </code><code>echo</code> <code>stop:4</code>
<code> </code><code>exit</code> <code>4</code>
<code>for</code> <code>i </code><code>in</code> <code>$(</code><code>cat</code> <code>$okl)</code>
<code> </code><code>if</code> <code>[ -f </code><code>"$i"</code> <code>]; </code><code>then</code>
<code> </code><code>j=</code><code>"$bdir$(echo $i | awk -F'/' '{$1="</code><code>";NF-=1;OFS="</code><code>/</code><code>";print}')"</code>
<code> </code><code>if</code> <code>[ -d </code><code>"$j"</code> <code>]; </code><code>then</code>
<code> </code><code>echo</code> <code>s:</code><code>"$i"</code>
<code> </code><code>echo</code> <code>d:</code><code>"$j"</code>
<code> </code><code>mv</code> <code>-f </code><code>"$i"</code> <code>"$j"</code>
<code> </code><code>echo</code> <code>"$i"</code> <code>>> $mvlog</code>
本文轉自 tanzhenchao 51CTO部落格,原文連結:http://blog.51cto.com/cmdschool/1843962,如需轉載請自行聯系原作者