天天看點

檔案移動腳本

腳本功能:将指定目錄多少天前的檔案移動到目标目錄并保持結構不變

應用場景:用于移走伺服器中無需保留的老舊資料(筆者是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>&gt; $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>&gt;&gt; $okl</code>

<code> </code><code>else</code>

<code>  </code><code>echo</code> <code>"$i"</code> <code>&gt;&gt; $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 &gt; $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>&gt;&gt; $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>&gt;&gt; $mvlog</code>

本文轉自 tanzhenchao 51CTO部落格,原文連結:http://blog.51cto.com/cmdschool/1843962,如需轉載請自行聯系原作者

繼續閱讀