先给脚本发了吧
先贴个效果图
完整代码如下:
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下换行不一样
虽说修好了,但是可能是靶场选的太难了,都没打进来,白开了个文件监控,早知道这周再写好了