如何在 Linux 中向现有文件名添加日期时间?

如何在 Linux 中向现有文件名添加日期时间?

我想在文件名中添加日期和时间,例如:08032016out.log.zip

这就是我尝试做的:

_now=$(date +"%m_%d_%Y")
_file="$_nowout.log"
touch $_file.txt # creating new file with the timedate

如何使用日期时间创建新文件?

答案1

您创建了一个名为 的变量_now,但后来引用了一个名为 的变量_nowout。为避免此类问题,请使用花括号分隔变量名:

_now=$(date +"%m_%d_%Y")
_file="${_now}out.log"
touch "$_file.txt"

请注意,我保持"$_file.txt"原样,因为.已经是变量名称分隔符。当有疑问时,"${_file}.txt"也可以使用。

奖励1:${varname}语法实际上提供了几个有用的字符串操作除了分隔之外,还对变量进行限制。

好处 2:创造性的 shell 转义和引用也可用于分隔变量名称。您可以分别引用变量和字符串文字(即file="$_now""out.log"file="$_now"'out.log')或将其中一个部分不加引号(即file=$_now"out.log"file="$_now"out.log)。最后,您可以转义变量名称后面的单个字符:file=$_now\out.log。不过,如果没有很好地理解 shell 引用和转义规则,我不建议重复使用这些示例。

答案2

您需要指定变量名称的边界。

_file将被设置为$_nowout.log,但 shell 无法确定您的意思是$_now$_nowout

使用

_file="${_now}out.log"

显式使用该$_now变量。

所以脚本变成:

_now=$(date +"%m_%d_%Y")
_file="${_now}out.log"
touch "${_file}.txt"

根据记录,其中可以缩短为:

touch "$(date +%m_%d_%Y)out.txt"

相关内容