目录
一、需求
目录/data/test/下有若干目录,如/data/test/hss、/data/test/yuhui,再进一层为以日期命名的目录,每天都会生成一个该类型目录,如/data/test/yuhui/20231202。由于/data所在磁盘快满了,所以需要将老文件(一年前)挪到另一目录/data2/test下,挪完后做软连接。注意:要确保老文件成功挪到/data2/test后才能做软连接,需要记录操作日志。
二、实现及关键知识点
1、脚本内容
# cat 5.sh
#! /bin/bash
main()
{
cd /data/test
#遍历第一层目录
for dir1 in `ls`
do
#遍历第二层目录,使用find只查找当前目录下一年前子目录
for dir2 in `find $dir1 -maxdepth 1 -type d -mtime +365`
do
#拷贝目录,使用-R可以自动级联创建目录层级
rsync -aR $dir2/ /data2/test
if [ $? -eq 0 ]
then
rm -rf $dir2
echo "/data/test/$dir2 移除成功"
ln -s /data2/test/$dir2 /data/test/$dir2 && \
echo "/data/test/$dir2成功创建软连接"
echo
else
echo "/data/test/$dir 未移动成功"
fi
done
done
}
main &>/tmp/move_old_data_`date +%F`.log
2、关键知识点
(1)通过main函数形式定义脚本日志
(2)find 使用-maxdepth定义查找目录层级
(3)使用“\ +回车”换行
(4)rsync命令-R参数的使用
三、验证
#准备测试目录
# pwd
/usr/local/src/shell/test/yuhui
# ll
总用量 0
drwxr-xr-x 2 root root 6 12月 4 21:41 20231202
drwxr-xr-x 2 root root 6 12月 4 21:40 20231203
drwxr-xr-x 2 root root 6 12月 4 21:40 20231204
# touch -d "2021-09-30" *
# ll
总用量 0
drwxr-xr-x 2 root root 6 9月 30 2021 20231202
drwxr-xr-x 2 root root 6 9月 30 2021 20231203
drwxr-xr-x 2 root root 6 9月 30 2021 20231204
# mkdir /data2/test -p
#执行脚本
# bash 5.sh
#查看执行结果,目录已拷贝
# ll /data2/test/yuhui/
总用量 0
drwxr-xr-x 2 root root 6 9月 30 2021 20231202
drwxr-xr-x 2 root root 6 9月 30 2021 20231203
drwxr-xr-x 2 root root 6 9月 30 2021 20231204
#软连接目录已创建
# ll /data/test/yuhui/
总用量 0
lrwxrwxrwx 1 root root 26 12月 4 21:58 20231202 -> /data2/test/yuhui/20231202
lrwxrwxrwx 1 root root 26 12月 4 21:58 20231203 -> /data2/test/yuhui/20231203
lrwxrwxrwx 1 root root 26 12月 4 21:58 20231204 -> /data2/test/yuhui/20231204
#查看执行日志
# cat /tmp/move_old_data_2023-12-04.log
/data/test/yuhui/20231204 移除成功
/data/test/yuhui/20231204成功创建软连接
/data/test/yuhui/20231203 移除成功
/data/test/yuhui/20231203成功创建软连接
/data/test/yuhui/20231202 移除成功
/data/test/yuhui/20231202成功创建软连接