业务需求
在linux执行文件夹或文件复制时,有时需要知道哪些文件更新了,哪些文件没有更新,哪些文件是新建的。基于此需求决定编写一个shell脚本来达到此目的。
shell 代码
1.扫描文件夹
function scan_src_dir_folder {
ls "$SRC_DIR" | while read file
do
if [ -d "$SRC_DIR/$file" ];
then
if [ ! -d "$DST_DIR/$file" ] ;
then
out_i "Mkdir $DST_DIR/$file"
mkdir -p $DST_DIR/$file
fi
fi
if [ -f "$SRC_DIR/$file" ];
then
copy_on_modify "$SRC/$file" "$DST_DIR/$file"
fi
done
}
2.递归扫描文件
function scan_src_dir_file {
ls "$1" | while read file
do
if [ -d "$1/$file" ];
then
if [ ! -d "$2/$file" ];
then
out_i "mkdir $2/$file"
mkdir - p $2/$file
fi
scan_src_dir_file "$1/$file" "$2/$file"
fi
if [ -d "$1/$file" ]
then
copy_on_modify "$1/$file" "$2/$file"
fi
done
}
3.复制文件
function copy_on_modify {
if [ -f $2 ]
then
cmp "$1" "$2" > /dev/null 2>&1
if [ $? = 0 ]
then
touch "$2"
else
echo "CP-F -> $1"
cp -f "$1" "$2"
fi
else
echo "CP-N -> $1"
cp -f "$1" "$2"
FI
}
4.日志输出
COLOR_INFO="echo -en \\033[1;32m"
COLOR_RESET="echo -en \\033[0m"
function out_i {
$COLOR_INFO
echo $*
$COLOR_RESET
}
shell 指令附录
- -d filename 如果filename为目录,则为真;
- -f filename 如果filename为常规文件,则为真;
- cmp 命令是用于比较2个文件是否有差异;
- touch 命令是用于更改文件的时间属性;
-
/dev/null 2>&1 cmp的比较结果命令将不会输出任何信息到控制台,也不会有任何信息输出到文件中;
网友评论