Shell file Mobile Script
Script Function: moves the files in the specified directory several days ago to the target directory and keeps the structure unchanged.
Application Scenario: used to remove old data that does not need to be retained on the server (I am using the ftp server environment)
Instructions for use: Modify the source directory and target directory in the script and modify the data migrated several days ago
Script code:
#!/bin/bash
wdir=
"/ftp"
# Source directory
bdir=
"/mvbackup/ftp"
# Target directory
fl=
"/tmp/filelist"
okl=
"/tmp/oklist"
erl=
"/tmp/errlist"
dl=
"/tmp/dirlist"
mvlog=
"/var/log/mvfile.log"
mdlog=
"/var/log/mkdir.log"
#enterworking(source)director
cd
$wdir
#createsourcefilelist
if
[-f$fl];
then
rm
-f$fl
fi
find
-mtime+300-
type
f|
grep
-
v
"\/\."
>$fl
# ^ Data generated before 300 days
#filtersourcefilelist
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
#createtragetdirectorlist
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
#createtragetdirector
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
#movefiletotragetfolder
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