在Linux中,如何使用当前日期和时间来创建文件


12

我要创建一个文件,该文件名将是当前日期和时间。我可以使用touch命令创建文件。我也可以通过date命令获取当前时间。因此,我认为我需要以某种方式将第二个命令传递给第一个命令。我怎样才能做到这一点?

Answers:


19

使用shell表达式的返回值作为以下参数touch

touch $( date '+%Y-%m-%d_%H-%M-%S' )

结果:一个名为eg的文件2012-03-11_14-33-53

该答案假定您正在使用bash(在man页面部分的Command Substitution中进行了描述),但是其他shell可以相同或仅略有不同。


@MdGao并在手册页的同一部分中进行了描述。我更喜欢我给出的答案,这有几个原因
丹尼尔·贝克

我删除了我的评论,因为Markdown打破了反引号。感谢您的链接@DanielBeck
Gao

2
@gasan只需用"引号将其引起来。你可以想像的输出date替换命令行的一部分,并且touch Sun Mar 11 14:48:31 CET 2012会创建文件名SunMar等等touch "Sun Mar 11 14:48:31 CET 2012",另一方面正常工作(除非我不知道冒号将如何好工作)。
丹尼尔·贝克

2
@gasan单引号不起作用,因为它们不允许命令替换或任何其他解释。请参见《 Bash手册》中的报价
slhck 2012年

2
@gasan的不同之处在于,不对单引号的内容进行评估。尝试使用echo "$HOME"echo '$HOME'。这就是为什么我建议使用的原因"
丹尼尔·贝克

0

您可以使用更简单的命令

touch $(date | tr ' ' '-')

有点不那么优雅,可以说是不太便携,但是,对,它也可以工作。
斯科特,

好的,因为我知道您正在阅读,所以我将进一步详细介绍:Daniel的回答以已知且完全受控的格式给出了结果。(1)的输出date通常将时间显示为hh:mm:ss。您的答案导致文件名包含冒号。这可能会导致基于Windows的文件系统上的错误。(2)简单调用的原始输出date取决于语言环境;即根据当地语言定制。尝试LANG=de_DE dateLANG=fr_FR date查看示例。…(续)
斯科特

(续)…(2a)因此,在(不太可能?)事件中,您曾经更改系统上的语言,或者将脚本和数据文件集从系统中提供给系统配置为不同的语言,会出现不匹配的情况。(我不确定这是否会是一个实际的问题,但这将是一个美学问题。)(2b)我不知道会执行此操作的任何语言环境,但理论上可能存在一个date将日期写为mm / dd / yy(或dd / mm / yy)。…(续)
斯科特

(续)…如果遇到过这样的系统,则文件名将包含斜杠,这将导致错误。(3)丹尼尔的答案给出了一个结果,其中由ls或产生的词典顺序(即字母顺序)*对应于时间顺序。有了您的答案,所有Fri文件将位于按字典顺序排序的任何列表的开头,Apr并且Aug将出现在所有其他月份之前。
斯科特(Scott)
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.