我需要得到这个修改日期值,我不能使用stat命令.
你知道有什么办法可以使用通用的* nix命令吗?
解决方法
解析ls
is a bad idea.不仅文件名中某些字符的行为未定义和平台依赖,为了您的目的,这将是mess with dates when they’re six months in the past.总之,是的,它可能适用于您在有限的测试.它不会与平台无关(所以没有可移植性),并且解析的行为不能得到保证,因为在各种系统上的“合法”文件名范围. (Ext4,例如allows spaces and newlines in filenames).
说完这些,亲自,我会使用ls,因为它是快速和容易的;)
编辑
正如Hugo在评论中指出的那样,OP不想使用stat.此外,我应该指出,下面的部分是BSD-stat特定的(当我在Ubuntu上测试时,%Sm标志不起作用;如果您对它有兴趣,Linux有一个stat命令,请阅读man page).
所以,非stat解决方案:使用日期
日期,至少在Linux上,有一个标志:-r,根据man page:
display the last modification time of FILE
所以,脚本解决方案将类似于:
date -r ${MY_FILE_VARIABLE}
这会给你类似的东西:
zsh% date -r MyFile.foo Thu Feb 23 07:41:27 CST 2012
解决OP的意见:
If possible with a configurable date format
日期有一个相当广泛的时间格式变量;阅读手册页了解更多信息.
我不是100%确定所有“类UNIX系统”中的便携式日期.对于基于BSD(如OS X),这将不起作用; BSD-date的-r标志完全不同.这个问题并没有“明确指出解决方案的可移植性”.对于基于BSD的解决方案,请参见下面的部分;)
一个更好的解决方案,BSD系统(在OS X上测试,使用BSD-stat; GNU stat略有不同,但可以以相同的方式工作).
使用统计您可以使用-f标志格式化stat的输出,您可以选择仅显示文件修改数据(对于该问题,这是很好的).
例如,stat -f“%m%t%Sm%N”./*:
1340738054 Jun 26 21:14:14 2012 ./build 1340738921 Jun 26 21:28:41 2012 ./build.xml 1340738140 Jun 26 21:15:40 2012 ./lib 1340657124 Jun 25 22:45:24 2012 ./tests
第一位是UNIX epoch time,日期是文件修改时间,其余的是文件名.
示例命令的细分
stat -f“%m%t%Sm%N”./*
> stat -f:call stat,并指定格式(-f).
>%m:UNIX时代.
>%t:输出中的标签分隔符.
>%Sm:S表示将输出显示为字符串,m表示使用文件修改数据.
>%N:显示相关文件的名称.
您的脚本中的命令如下:
stat -f "%Sm" ${FILE_VARIABLE}
会给你输出如:
Jun 26 21:28:41 2012