是否有一个特定的Unix/Linux命令显示文件何时被重命名?我在Linux中有一个文件,想知道文件何时被重命名。我尝试过ls -ltr
,但只会显示创建时的日期,而不会显示上次修改时的日期。Linux/Unix命令检查文件何时被重命名
是否有特定的Unix/Linux命令来做到这一点?
是否有一个特定的Unix/Linux命令显示文件何时被重命名?我在Linux中有一个文件,想知道文件何时被重命名。我尝试过ls -ltr
,但只会显示创建时的日期,而不会显示上次修改时的日期。Linux/Unix命令检查文件何时被重命名
是否有特定的Unix/Linux命令来做到这一点?
您可以使用
stat filename
检查Access
当它是最后一次读取。
更新时检查Modify
。
检查Change
是否重命名。
加上其他像块,索引节点等
谢谢......这是完美的......正是我所需要的:) – user2579439
更改时间报告inode更改。重命名不会更改inode。 –
我指的是“更改”字段。重命名后,我从来没有说过有关inode变化的任何信息 – bsd
当文件发生某些事情时,您可以使用Inotify库进行通知。 它可能与脚本语言有绑定关系。
谢谢我绝对可以做到这一点...但如果一个特定的文件已被重命名,并想知道它是什么时候重命名然后,这就是我想知道的... – user2579439
@ user2579439你无法知道过去改名。在T时刻你可以知道重命名。记录它,或者现在处理它,但是你将无法知道过去的重命名。请参阅Jonathan回答获取更多信息。 – Xaqq
的行为要依赖于文件系统类型的文件信息。在传统的Unix文件系统(特别是Mac OS X HFS文件系统)中,文件系统中文件重命名的有趣之处在于它根本不影响文件的inode;它只影响文件从/移动到的目录(或多个目录)。因此,在单个文件系统中,更改重命名的唯一时间戳是保存该文件的目录的修改时间。例如*:
$ fl -a -c -m -n xxx.pl
2013-07-17 16:17:17 2013-07-17 16:17:17 2013-07-17 16:17:17 xxx.pl
$ mv xxx.pl yyy.pl
$ fl -a -c -m -n yyy.pl
2013-07-17 16:17:17 2013-07-17 16:17:17 2013-07-17 16:17:17 yyy.pl
$
这意味着,在这样的文件系统,你不能当这个文件被改名了一段时间的文件改名后告诉。
* fl
是一个自制命令;该调用等同于Mac OS X stat
调用stat -f '%Sa %Sm %Sc %N'
。这只与GNU/Linux stat
命令略有关系。
另一方面,经验证据显示,Linux ext4文件系统确实记录了名称更改,同时更改了inode本身的修改时间。
$ stat -c '%x %y %z %n' test.dat
2013-07-19 10:31:31.803842672 -0700 2013-07-19 10:31:31.803842672 -0700 2013-07-19 10:31:31.803842672 -0700 test.dat
$ mv test.dat test.data
$ stat -c '%x %y %z %n' test.data
2013-07-19 10:31:31.803842672 -0700 2013-07-19 10:31:31.803842672 -0700 2013-07-22 09:11:49.074339525 -0700 test.data
$
所以,你能做什么依赖于O/S在其上运行,并且文件系统类型的文件上。
如果您有inotify服务可用并且正在运行,您可以记录文件重命名的事件,但是如果您不记录该事件,则不知道文件何时被重命名。
目录上的修改时间并不是特定文件更改时间的良好指示;只要任何文件被创建,移动,删除,它都会更改。如果只有在目录中的一个文件,然后更改时间可能表明该文件被创建或重命名时,但单个文件的目录是例外,而不是规则。
在AIX上,您可以用等同“STAT”的 -
国家统计局的文件名
你应该能够沿着知道文件的最后更新和修改,保存时间精确到秒与更多的信息。
这很容易演变成一个编程问题:“如何在Unix/Linux上编写程序来告诉文件何时更改?是否有任何命令已经这样做?”有一个子问题“命令是否便携?”这是shell编程的重要信息,编程(包括shell编程)专门针对SO编写。 –