先给脚本发了吧
先贴个效果图
完整代码如下:
1 #!/bin/bash 2 3 # 指定要监控的文件夹路径 4 WATCH_DIR=$1 5 6 # 检查参数是否为空 7 if [ -z "$WATCH_DIR" ]; then 8 echo "请输入要监控的文件夹路径" 9 exit 1 10 fi 11 12 # 备份文件 13 if [ -d "bak/$WATCH_DIR" ]; then 14 echo "文件已备份:bak/$WATCH_DIR" 15 else 16 mkdir bak 17 cp -r $WATCH_DIR bak/$WATCH_DIR 18 echo "备份文件不存在,已备份到bak/$WATCH_DIR" 19 fi 20 # 初始化文件列表 21 OLD_FILE_LIST=$(find "$WATCH_DIR") 22 23 echo "开始监控" 24 echo "--------------------" 25 while true; do 26 # 获取最新的文件列表 27 NEW_FILE_LIST=$(find "$WATCH_DIR") 28 29 # 检查新增文件 30 while read -r file; do 31 if ! grep -q "$file" <<< "$OLD_FILE_LIST"; then 32 echo "检测到新增文件或文件夹:" 33 echo "$file" 34 # 自动删除新增文件 35 if [ -f "$file" ]; then 36 echo "已删除新增文件: $file" 37 rm "$file" 38 echo "--------------------" 39 elif [ -d "$file" ]; then 40 echo "已删除新增文件夹: $file" 41 echo "--------------------" 42 rm -r "$file" 43 fi 44 NEW_FILE_LIST=$OLD_FILE_LIST 45 fi 46 done <<< "$NEW_FILE_LIST" 47 # 检查删除文件 48 while read -r file; do 49 if ! grep -q "$file" <<< "$NEW_FILE_LIST"; then 50 # 判断文件是否仍存在 51 if [ ! -e "$file" ]; then 52 echo "检测到被删除文件:" 53 echo "$file" 54 echo "恢复被删除文件或文件夹: $file" 55 cp -R "bak/$file" "$file" 56 echo "--------------------" 57 # 自动恢复被删除的文件 58 NEW_FILE_LIST=$OLD_FILE_LIST 59 fi 60 fi 61 done <<< "$OLD_FILE_LIST" 62 63 64 # 等待一段时间后再次检查 65 sleep 0.3 66 done
写了差不多三天,可能是太菜的原因
一开始用的是comm来比较,然后测试时候发现删除的如果是中间项会导致后边的错位,comm对不上,直接库库给后边全删了,改了半天没想明白咋改,后来换成了这种方法
昨天打awd时候还出事儿了,我是直接从windows给文件传上去了,结果出来一堆'\r'告诉我运行不了,我寻思半天,我这就是为了能通用才用bash写的,你这是哪国的系统咋bash基础命令都不一样?
然后捅咕半天,想起来windows下换行和linux下换行不一样
虽说修好了,但是可能是靶场选的太难了,都没打进来,白开了个文件监控,早知道这周再写好了
标签:脚本,文件,WATCH,echo,监控,bak,DIR From: https://www.cnblogs.com/theskyforfly/p/17591490.html