如何列出 Linux 中已修改或新创建的文件或目录。这样我就可以触发另一个命令或 shell 脚本来执行另一个任务。例如。文件 a.txt 和 test.txt 被修改,我想使用 linux cmd 查找最后更改的文件,然后触发 restart.sh 脚本(比如说)来获取更改。
答案1
有多种方法可以实现此目的,但以下是 Python 中的示例:
#!/usr/bin/env python
import os
import glob
import time
import subprocess
if __name__ == '__main__':
mtimes = dict()
while True:
for f in glob.glob('*.txt'):
if f not in mtimes:
mtimes[f] = os.path.getmtime(f)
if mtimes[f] != os.path.getmtime(f):
print("File {} was modified. Executing restart.sh.".format(f))
mtimes[f] = os.path.getmtime(f)
output = subprocess.check_output('./restart.sh')
print(output)
time.sleep(1)
您可能需要根据您的环境进行调整:
glob.glob('*.txt')
是您要监视的文件的搜索模式。subprocess.check_output('./restart.sh')
是你调用脚本的地方。它可能驻留在其他地方。time.sleep(1)
是检查之间的延迟(以秒为单位)。
答案2
我会选择inotifywait。他们查看创建、修改、删除、移动的系统调用,您可以在 shell 中编写脚本,检测到该情况时要做什么