是否有特定的Unix / Linux命令可以在重命名文件时显示?我在Linux机器中有一个文件,想知道文件何时重命名。我尝试了ls -ltr
,但该命令仅显示创建日期,而不是上次修改日期。
是否有特定的Unix / Linux命令来执行此操作?
答案 0 :(得分:11)
您可以使用
stat filename
检查Access
上次阅读的时间。
检查Modify
更新时间。
检查Change
是否已重命名。
加上其他文件信息,如块,索引节点等。
答案 1 :(得分:6)
行为将取决于文件系统类型。在经典的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
$
因此,您可以做什么取决于您运行的操作系统以及您的文件所在的文件系统类型。
如果你有inotify服务可用并且正在运行,你可以记录文件重命名的事件,但是如果你没有记录事件,就没有'post mortem'方法知道何时重命名文件。
目录上的修改时间不是指示特定文件何时更改的良好指示;每当创建,移动,删除任何文件时,它都会更改。如果目录中只有一个文件,则更改时间可能表示该文件的创建或重命名时间,但单个文件目录是例外而不是规则。
答案 2 :(得分:1)
您可以使用Inotify库在文件发生某些事件时收到通知。 可能存在与脚本语言的绑定。
答案 3 :(得分:0)
在AIX上,您可以使用等效的“stat” -
istat filename
您应该能够知道文件的上次更新,修改和访问时间,以及更多信息。