gpt4 book ai didi

linux - 脚本中的文件名最后修改日期 shell

转载 作者:IT王子 更新时间:2023-10-28 23:52:53 27 4
gpt4 key购买 nike

我正在使用 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 解决方案:使用日期

date,至少在 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

date 有一组相当广泛的时间格式变量;阅读手册页以获取更多信息。

我不是 100% 确定 date 在所有“类 UNIX 系统”中的可移植性。对于基于 BSD 的系统(例如 OS X),这将工作; BSD 日期的 -r 标志做了完全不同的事情。这个问题没有具体说明解决方案的可移植性。对于基于 BSD 的解决方案,请参阅以下部分;)

更好的解决方案,BSD 系统(在 OS X 上测试,使用 BSD-stat;GNU stat 略有不同,但可以以相同的方式工作)。

使用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"./*

  1. stat -f:调用stat,并指定格式(-f)。
  2. %m:UNIX 纪元时间。
  3. %t:输出中的制表符分隔符。
  4. %Sm:S表示将输出显示为stringm表示使用文件修改数据。
  5. %N:显示相关文件的名称。

脚本中的命令如下:

stat -f "%Sm" ${FILE_VARIABLE}

将为您提供如下输出:

Jun 26 21:28:41 2012

阅读man page stat 获取更多信息;时间戳格式化由 strftime 完成.

关于linux - 脚本中的文件名最后修改日期 shell,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11212663/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com