确定由于运行命令而更改的文件/目录

确定由于运行命令而更改的文件/目录

如果我在 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 配置文件语法了解详情)。

其他常用来跟踪文件系统操作的工具包括inotifywaitauditd;看Linux文件访问监控了解详情。

答案2

对于基本/简单的解决方案,首先创建一个文件,然后在操作后运行 afind以显示比该文件更新的文件?

touch /tmp/myfile
( do stuff )
find ${MY_DIR} -newer /tmp/myfile

正如 @roaima 指出的,这仅解决您的“哪些文件和目录因此被修改”的要求:它不会识别已删除的文件。

相关内容