如果我在 bash 中运行命令,有什么方法可以确定哪些文件和目录因运行该命令而被修改?
例如,如果我运行:
export $MYDIR="/home/users/myuser/"
touch $MY_DIR/*
我希望能够列出已修改的文件:
/home/users/myuser/file1
/home/users/myuser/file2
/home/users/myuser/file3
但不是专门针对touch
.我希望解决方案具有通用性任何命令。
这可能吗?
答案1
对于这种用例,我非常喜欢一些工具:
maybe
将运行命令,但伪造对文件系统的任何修改(假装它成功而不执行它,并记录它),然后显示所有更改的列表;然后你可以决定是否再次运行该命令 - 它并不完美,请参阅问题清单,但在很多情况下已经足够了;- 记录文件系统提供日志文件系统覆盖,它允许对文件系统的所有更改通过,但以可配置的方式记录它们(请参阅LoggedFS 配置文件语法了解详情)。
其他常用来跟踪文件系统操作的工具包括inotifywait
和auditd
;看Linux文件访问监控了解详情。
答案2
对于基本/简单的解决方案,首先创建一个文件,然后在操作后运行 afind
以显示比该文件更新的文件?
touch /tmp/myfile
( do stuff )
find ${MY_DIR} -newer /tmp/myfile
正如 @roaima 指出的,这仅解决您的“哪些文件和目录因此被修改”的要求:它不会识别已删除的文件。