bash监控指定目录下的文件变动并执行相应动作

#!/bin/bash

dir_to_monitor="/home/sub_dir
prev_files=$(ls -A $dir_to_monitor)
#echo "prev_files: $prev_files"
prev_files_file=$(mktemp)
ls -A $dir_to_monitor > $prev_files_file

while true; do
    current_files=$(ls -A $dir_to_monitor)
    #echo "current_files: $current_files"
    current_files_file=$(mktemp)
    ls -A $dir_to_monitor > $current_files_file
    added_files=$(comm -13 $prev_files_file $current_files_file)

    if [ -n "$added_files" ]; then
        echo "新增文件: $added_files"
        find /${dir_to_monitor}/*.sh -type f -exec sed -i '/network restart/a\route -n' {} \;
        find /${dir_to_monitor}/.sh -type f -exec sed -i '1i\network start' {} \;
    fi

#    if [ -n "$removed_files" ]; then
#        echo "删除文件: $removed_files"
#    fi
    # 删除之前的临时文件
    rm $prev_files_file
    # 将当前文件列表临时文件重命名为上一轮的文件列表临时文件,用于下一轮对比
    mv $current_files_file $prev_files_file


    sleep 1
done

在含有特定内容的某行后添加新行

       find /${dir_to_monitor}/*.sh -type f -exec sed -i '/network restart/a\route -n' {} \;

在每个文件开头添加新行

       find /${dir_to_monitor}/*.sh -type f -exec sed -i '1i\network start' {} \;

 

你可能感兴趣的:(Bash,笔记,网络安全,bash,服务器,linux,运维)