我想找到我最近创建的一个文件,但我不记得任何内容,只能猜测它位于任何可能深度的间接目录下。
- 我检查了目录的所有子目录的时间,但它们的时间都比我创建文件的时间早。我想知道为什么当目录中的文件更新时,目录的时间没有更新?
- 如果是你,你会如何找到该文件?通过使用
find
和一些时间选项?谢谢。
答案1
我会用
find <PARENT_DIR> -type f -mtime 1
1
最后一次修改的时间(以天为单位)(您可以在其前面加上-
或+
来表示“少于 X 天”或“多于 X 天”):因此,如果您希望文件在最近 3 天内修改,您将做-mtime -3
答案2
目录的修改时间,就像任何其他文件一样(注意如何目录叫做目录(的列表姓名/数字像电话簿一样的映射)而不是文件夹)每当内容被修改。
即在其中添加(链接)、删除(取消链接)或重命名文件的时间。
请注意,文件可以链接到多个目录。系统不维护任何文件链接到哪个目录的实时列表(对于给定的用于写入的打开文件描述符,它甚至不跟踪哪个目录)小路用于打开文件(无论如何,其组件可以随时重命名)),如果是,并且如果是,则更新该文件链接到的每个目录的修改时间及其所有祖先/
,它最终只会这样做。
通常,您唯一的选择是查找文件系统上每个文件的修改时间。
你可以使用方法find
如 Corentin 所示,或者为了避免读取所有这些目录,您可以查看索引节点表中所有索引节点的修改时间(尽管我不知道有任何工具可以做到这一点)。
某些文件系统btrfs
可以为您提供一些关于最近修改的文件是什么的线索:
$ sudo btrfs sub find-new / -1
transid marker was 2273028
$ sudo btrfs sub find-new / 2273020
inode 60319801 file offset 212992 len 4096 disk start 8350875648 offset 0 gen 2273024 flags NONE root/screenlog.2
inode 60319801 file offset 217088 len 28672 disk start 8403632128 offset 0 gen 2273023 flags NONE root/screenlog.2
inode 61045822 file offset 360448 len 4096 disk start 1111568384 offset 0 gen 2273022 flags NONE var/log/apache2/access.log
inode 61045835 file offset 2326528 len 8192 disk start 7824994304 offset 0 gen 2273024 flags NONE var/log/syslog
inode 61045840 file offset 57344 len 8192 disk start 1517305856 offset 0 gen 2273023 flags NONE var/log/kern.log
[...]