我想知道当我在 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)