linux脚本以时间做文件名,linux – 文件名最后修改日期shell在脚本

为什么不应该使用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

示例命令的细分

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完成.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值