linux – 文件名最后修改日期shell在脚本

前端之家收集整理的这篇文章主要介绍了linux – 文件名最后修改日期shell在脚本前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我使用bash构建一个脚本,我将在变量中获取文件名,然后使用此变量获取最后修改日期的文件unix.

我需要得到这个修改日期值,我不能使用stat命令.

你知道有什么办法可以使用通用的* nix命令吗?

解决方法

为什么不应该使用ls:

解析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

请阅读man page了解更多信息;时间戳格式由strftime完成.

猜你在找的Linux相关文章