我想了解更多有关文件访问时间和文件修改时间与目录访问和修改时间之间的关系。
我确实读过“允许在此提问”,但如果有更好的 StackExchange 网站可以回答这个问题,请告诉我。这不是 Ubuntu 系统,所以 askubuntu.com 不适用。
系统:
- Redhat Enterprise Linux 5.5.56。不,我们无法升级,请不要询问此事。
- 我尝试坚持使用 bash。
- 查找版本 4.2.27
问题:我想编写一个 bash 脚本,从运行脚本的当前目录开始,列出目录以及至少 300 天内未修改的子目录。我检查的这些目录包含的文件的修改时间可能晚于目录的修改时间。我只想列出包含“JOB”但不包含“DIV”的目录名称(区分大小写)。
注意:我们的目录排列如下:CLS_xxx 目录将包含许多 GRP_xxx 目录。GRP_xxx 目录将包含许多 JOB_xxx 目录。JOB_dirs 可能包含许多 DIV_xxx 目录。因此,虽然我可能位于包含所有 CLS 目录的目录中,但我只想显示包含 JOB 的目录。
/path/to/containerdir/
CLS_xxx/
GRP_xxx/
JOB_xxx/
Files under here might be modified later than the JOB_xxx dir.
DIV_xxx/
files under DIV/ might be modified later than the JOB_xxx dir.
清楚吗?:)
问题:
- 如果修改了目录内名为 JOB_1234 的文件,这会对目录修改时间产生什么影响?
- 更改文件是否会影响目录访问时间?我应该使用目录访问时间来查找吗?
- 是否有目录访问时间的开关,因为我在系统的手册页中没有看到它。
- 目录 mod 时间在什么时候发生改变?我们何时更改其权限?更改所有者或组?还有其他吗?
- 目录访问时间何时改变?目录内的文件何时被访问或改变?
我读了 find 的手册页,但没有找到答案。我还从 Google 搜索中阅读了大约 8 页find
,也没有找到答案。
此命令适用于查找目录修改时间 > 300 天。
find . -type d -print -mtime +300 | grep -v 'DIV' | grep -P 'JOB' | sort > $outfile
但我的问题更多的是,如果目录中的文件最近被修改了怎么办?给定一个以 JOB_ 开头的目录,如何找到每个 JOB_ 目录以及该 JOB_ 目录中文件的最近文件或目录修改时间?
谢谢。
答案1
问题很多,所以我将回答“它是如何工作的”部分,而不是“我如何让它工作”。
这取决于使用的文件系统。我根据 ext[234] 回答,其他人可能以相同或类似的方式工作。
不会,如果文件被修改,目录修改时间不会改变。在这种情况下,目录不会以任何方式被修改,它仍然包含与其链接的相同文件、目录等。
与前面相同,如果“更改文件”的意思与“修改某个文件”相同。
如果您删除一个文件并添加一个同名的新文件,或者将另一个文件移动到另一个文件“之上”,那么目录就会被修改。
当目录被修改时。这意味着将 inode 链接/取消链接到其中,如文件或子目录。
权限更改会改变改变时间,但没有修改时间。这些是不同的。
如果将目录移到其他地方,改变时间会改变,但是修改时间不会。
目录访问时间在目录被访问时改变,如果它还没有被关闭。该卷可能已装入诺亚泰这意味着通常不写入最后访问时间。请注意,目录数据也被缓存。
另外,如果您只是访问子目录,则父目录的访问时间不会改变。
因此,如果您搜索过去 300 天内未更改的目录,它们可能仍包含已更改的文件。文件创建或删除尚未发生,但编辑内容可能发生。您必须按照您所说的逐个文件进行检查。