使用以 ISO 日期命名的新文件夹创建文件并在 vim 中打开该文件的别名

使用以 ISO 日期命名的新文件夹创建文件并在 vim 中打开该文件的别名

我想创建一个别名,.bashrc以便我可以在名为 ISO date 的文件夹中创建 Markdown 或文本文件格林威治标准时间然后在编辑器中打开该文件。

这是我期望的输出(示例): ./20211226220131/readme.md并已readme.md在 中打开vim

答案1

假设您使用的是bash4.2 或更高版本:

edmd () {
    local now
    TZ=GMT printf -v now '%(%Y%m%d%H%M%S)T' -1
    mkdir "$now" && "${EDITOR:-vim}" "$now/readme.md"
}

此 shell 函数创建一个名为 的局部变量now,其中包含 GMT 时区的当前时间戳。然后,它创建一个以此时间戳命名的目录,如果成功,它允许您readme.md使用首选编辑器编辑其中的文件,或者vim如果EDITOR该目录为空或未设置。

这个 shell 函数将在您通常声明别名的任何地方声明,并像这样使用:

$ edmd

shell 函数不依赖于外部date实用程序,并且不会意外更改您当前的工作目录。

测试:

$ edmd

(我的编辑器打开,我输入一些内容,保存文件,然后退出编辑器。)

$ tree
.
`-- 20211226092420
    `-- readme.md

1 directory, 1 file

另请注意,日期和时间的 ISO 8601 格式写为

  • “2021-12-26T14:52:04Z”,或
  • “20211226T145204Z”

在 UTC 时区,或作为

  • “2021-12-26T14:52:04+00:00”

...其中“00:00”给出了相对于 UTC 的时间偏移。

因此你可以使用

TZ=UTC printf -v now '%(%Y-%m-%d-T%H:%M:%SZ)T' -1

或者

TZ=UTC printf -v now '%(%Y%m%dT%H%M%SZ)T' -1

或者

TZ=GMT printf -v now '%(%Y-%m-%d-T%H:%M:%S%z)T' -1

...获得“ISO 日期”。

答案2

如果您正在为您创建的脚本寻找别名(而不是调用脚本),它看起来像这样:

alias datef='d="$(date +"%Y%m%d%H%M%S")" && mkdir "$d" && cd "$d" && vim readme.md'

如果您希望保留在执行别名的同一文件夹中(而不是/[date]退出 vim 后最终位于该文件夹中),请cd在子 shell 中使用(效果是cd子 shell 本地的):

alias datef='d="$(date +"%Y%m%d%H%M%S")" && mkdir "$d" && ( cd "$d" && vim readme.md )'

或者,根本不更改目录:

alias datef='d="$(date +"%Y%m%d%H%M%S")" && mkdir "$d" && vim "$d/readme.md"'

答案3

您可以使用别名轻松完成这一切,是的:

alias foo='mkdir -p "$(TZ=GMT date +"%Y%m%d%H%M%S")" && vim "$_"/readme.md'

您希望这样-p,如果目录已经存在,您仍然可以readme.md在其中编辑或创建文件。将命令TZ=GMT的时区设置date为 GMT。该$_变量保存为上一个命令提供的参数,因此将在刚刚创建的目录中vim $_/readme.md打开一个文件。readme.mdman bash

_

在 shell 启动时,设置为用于调用在环境或参数列表中传递的 shell 或正在执行的 shell 脚本的路径名。随后,扩展至在扩展后在前台执行的上一个简单命令的最后一个参数。

答案4

我通过创建这个脚本找到了解决方案

#!/bin/bash
d="$(TZ=GMT date +"%Y%m%d%H%M%S")"
mkdir "$d"
cd "$d"
vim readme.md

相关内容