问小白 wenxiaobai
资讯
历史
科技
环境与自然
成长
游戏
财经
文学与艺术
美食
健康
家居
文化
情感
汽车
三农
军事
旅行
运动
教育
生活
星座命理

自动化文件管理:Ubuntu中的文件监控与上传脚本指南

创作时间:
作者:
@小白创作中心

自动化文件管理:Ubuntu中的文件监控与上传脚本指南

引用
CSDN
1.
https://m.blog.csdn.net/qq_53960242/article/details/142449059

在Ubuntu系统中,如何实现对特定目录的文件更改进行实时监控,并将更新后的文件自动上传到服务器?本文将详细介绍使用inotify-tools工具配合git或bypy实现这一功能的具体步骤和方法。

安装必要的工具

首先,确保你的系统中安装了以下工具:

  • inotify-tools:用于监控文件系统事件。
  • bypygit:用于上传文件到服务器。

如果bypy不在你的系统的官方仓库中,你可能需要使用Python的包管理器pip来安装它。以下是使用pip安装bypy的命令:

pip install bypy

编写脚本

使用git实现

下面是一个简单的示例脚本,它使用inotify-tools来监控当前目录下的文件更改,并使用git命令来上传更新后的文件:

#!/bin/bash

# 监控当前目录的文件更改
inotifywait -m -r -e modify,move,create,delete --format '%w%f' . | while read file
do
    # 将更改的文件添加到git仓库
    git add "$file"
    # 提交更改
    git commit -m "Update $file"
    # 推送到远程仓库
    git push origin master
done

这种方法可以实现检测与上传,但是需要在git的配置文件中保存自己的账号与密码。否则每次提交时,命令行会要求输入密码:

git config --global credential.helper store

如果不想保存或输入密码也可以使用个人访问令牌(Personal Access Token, PAT),确保个人访问令牌具有推送代码的权限。

使用bypy实现

使用脚本监控./results./runs_new两个目录,并上传到百度云的New_data/Adversarial_camou目录,脚本为:

#!/bin/bash

# 定义监控目录
MONITOR_DIRS="./results ./runs_new"

# 定义百度云目标目录
BDY_DIR="New_data/Adversarial_camou"

# 监控文件更改
inotifywait -m -r -e modify,move,create,delete --format '%w%f' $MONITOR_DIRS | while read file
do
    # 构建百度云路径
    bdy_file="${BDY_DIR}/${file#./}"
    # 上传文件
    bypy upload "$file" "$bdy_file"
done
  1. 定义监控目录:监控./results./runs_new两个目录。
  2. 定义百度云目标目录:上传文件到百度云的New_data/Adversarial_camou目录。
  3. 监控文件更改:使用inotifywait命令监控文件的修改、移动、创建和删除事件。
  4. 构建百度云路径:将本地文件路径转换为百度云中的相对路径。
  5. 上传文件:使用bypy upload命令上传文件到百度云。

运行和监控脚本

在运行脚本之前,确保给予它执行权限:

然后,可以在后台运行这个脚本:

nohup ./your_script.sh &

这样,脚本就会开始监控当前目录下的文件更改,并将更新后的文件上传到服务器。

终止脚本运行

在Linux系统中,可以使用多种方法来终止或杀死进程。以下是一些常用的命令和方法:

  1. 使用kill命令
  • 首先,需要找到进程的进程ID(PID)。可以使用ps命令或top命令来查找。

  • 然后,使用kill命令加上PID来发送信号终止进程。

    kill PID
    
  • 如果进程不响应普通的终止信号,可以尝试发送更强制的信号,如SIGKILL(信号值为9)。

    kill -9 PID
    
  1. 使用pkill命令
  • 可以使用pkill命令根据进程名称或其他属性来杀死进程。

    pkill process_name
    
  1. 使用killall命令
  • 类似于pkillkillall命令也可以根据进程名称来杀死进程。

    killall process_name
    
  1. 使用tophtop命令
  • tophtop界面中,可以找到进程的PID,并发送信号来杀死进程。
  • top中,按k键,然后输入PID和信号值(默认是9)。
  • htop中,选中进程后按F9,然后选择信号值。
  1. 使用pgrepkill组合
  • 可以使用pgrep命令来查找特定进程的PID,然后使用kill命令来杀死进程。

    kill $(pgrep process_name)
    
  1. 使用systemctl命令
  • 如果进程是一个系统服务,可以使用systemctl命令来停止服务。

    systemctl stop service_name
    
  1. 使用killtree命令
  • killtree可以杀死一个进程及其所有子进程。

    killtree PID
    

请记住,在使用强制杀死进程的方法(如kill -9)之前,最好先尝试使用默认的终止信号(如kill PID),因为强制方法不会给进程清理资源的机会,可能会导致数据丢失或其他问题。

在使用这些命令时,确保有足够的权限来终止目标进程。如果没有,可能需要使用sudo来获取必要的权限。

© 2023 北京元石科技有限公司 ◎ 京公网安备 11010802042949号