是否有特定的Unix/Linux命令可以在重命名文件时显示?我在Linux机器中有一个文件,想知道文件何时重命名.我尝试过,ls -ltr但该命令仅显示创建日期,而不是上次修改日期.
是否有特定的Unix/Linux命令来执行此操作?
bsd*_*bsd 12
您可以使用
stat filename
Run Code Online (Sandbox Code Playgroud)
检查Access上次读取的时间.
检查Modify它何时更新.
检查Change它是否已重命名.
加上其他文件信息,如块,inode等.
行为将取决于文件系统类型.在经典的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
$
Run Code Online (Sandbox Code Playgroud)
这意味着在这样的文件系统上,您无法确定文件重命名后重命名文件的时间.
*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
$
Run Code Online (Sandbox Code Playgroud)
因此,您可以做什么取决于您运行的操作系统以及您的文件所在的文件系统类型.
如果你有inotify服务可用并且正在运行,你可以记录文件重命名的事件,但是如果你没有记录事件,就没有'post mortem'方法知道何时重命名文件.
目录上的修改时间不是特定文件何时更改的良好指示; 每当创建,移动,删除任何文件时,它都会更改.如果目录中只有一个文件,则更改时间可能表示该文件的创建或重命名时间,但单个文件目录是例外而不是规则.
| 归档时间: |
|
| 查看次数: |
5353 次 |
| 最近记录: |