更改 BSD 中 touch 命令的时间格式

更改 BSD 中 touch 命令的时间格式

我想知道当我在 c shell 中使用 touch 命令修改时间时如何更改时间格式。

例如我需要使用

touch -a -t 051512002015 file.txt

这会将访问时间更改为2015年5月15日12:00。

我想做的是(现在是第一年)

touch -a -t 201505151200 file.txt

这就是触摸在 Linux 中的工作原理。我在 Windows 上使用 UnxUtils,我几乎可以肯定它使用的是 c-shell touch。我希望命令保持一致。是否可以更改 c-shell touch 命令?

答案1

这与外壳无关,touch是外部程序。

历史上有两种用于日期参数的语法touch

touch -t CCYYMMDDhhmm.SS    # CC or CCYY may be omitted; .SS may be omitted
touch MMDDhhmmYY            # YY may be omitted

该命令出现在Unix第七版没有日期参数。 BSD 版本-t在某个地方获得了该选项(所有日期组件均按降序排列)4.4BSD。系统V(例如太阳操作系统4.1.3) 采用直接日期形式,年份结尾。到时单 Unix v2(基于 POSIX:1992),System V 形式被认为已过时,并且不再包含在单 Unix v3 (POSIX:2001)

我建议在脚本中使用标准 (BSD) 语法。在需要 BSD 语法的遗留系统上,安排一个兼容的touch.有几种可能的方法:

  • 编写一个包装函数,如果检测到您的脚本在旧系统上运行,则该函数会打乱参数。
  • 安排一个PATH将符合标准的目录放在旧目录之前。
  • (如果您发布需要支持的确切遗留变体和版本,您可能会得到更具体的建议。)

答案2

据我所知,touch 命令不属于任何 shell 的一部分。至少根据我的 tcsh 和 bash 手册页,没有提到 touch。相反,触摸是它自己的命令。 Linux 和 *BSD 上的 touch 命令会略有不同,这是不可避免的,但如果需要,您可以围绕它编写一个包装器。然而,乍一看,-t 参数在我的 Ubuntu Linux 机器和我的 FreeBSD 机器上似乎是相同的。以下是 Ubuntu Linux 8.04 上触摸手册页的格式:

touch [-t [[CC]YY]MMDDhhmm[.ss]]

在 FreeBSD 的手册页上:

touch [-t [[CC]YY]MMDDhhmm[.SS]]

我不确定你奇怪的触摸时间格式来自哪里,但请看下面。 FreeBSD 手册页还更详细地介绍了这些字母的含义,但它与 FreeBSD 上使用的旧日期命令使用的格式相同:

date [-jnu] [[[[[CC]YY]MM]DD]hh]mm[.ss]

它实际上与两个触摸命令的格式相同。奇怪的是,尽管在 Linux 上,他们出于某种未知的原因在日期命令上使用了不同且晦涩的格式:

date [MMDDhhmm[[CC]YY][.ss]]

我不知道为什么 Linux 将日期的年份放在分钟和秒之间。如果不清楚,以下是所有这些命令中字母的含义:

  • CC - 世纪 (00-99)
  • YY - 世纪年(00-99)
  • MM - 月份 (01-12)
  • DD - 一个月中的某一天 (01-31)
  • hh - 小时 (00-23)
  • 毫米 - 分钟 (00-59)
  • ss - 秒 (00-61)(是的,61,而不是 59)

相关内容