xChar
·4 years ago

好久好久之前,看 sorrycc 的视频的时候,发现他用了一个很 tricky 的命令:cdtmp,执行命令后 shell 就会跳到 /tmp/sorrycc-xxxxxx 文件夹下,觉得十分好用。

自己也用了蛮久了,真的十分好用,有很多场景都需要用到:

想写一个验证想法的小 case,或者验证一下某个函数的用处,或者 clone 一下某个仓库查看一下相关内容。直接 cdtmp 打开一个临时文件夹,在里面直接做你想做的事情,而且完全不需要担心这些文件后续的清理问题,Windows 来说使用清理软件清理垃圾时一般都会删除临时文件,Linux 下也有相应的清除 tmp 目录的逻辑和方法。

简单介绍一下这个命令,给出 zsh 中的实现以及一个 Windows 下 PowerShell 里的同样功能的函数。

命令的作用就是:在系统的临时目录创建一个文件夹然后跳转过去。

zsh

sorrycc 提到的 cdtmp

cdtmp,进入到一个随机创建的临时目录,简单好用,http://frantic.im/cdtmp
-- https://github.com/sorrycc/zaobao/issues/2

原文 中给出了 zsh 中的实现的链接。

把下面这行代码添加到你的 .zshrc 文件即可:

alias cdtmp='cd `mktemp -d /tmp/artin-XXXXXX`'

这条命令会在系统临时目录下创建一个名为 artin-XXXXXX 的文件夹,然后跳转过去。

PowerShell

我使用的是 PowerShell Core 7,如果你无法使用的话可以自己改改。

在 PowerShell 中单靠 Set-Alias 就没法实现这样的效果了(或者实现比较复杂),但可以写成一个函数,也非常简单,可以直接在 PowerShell 中执行。

不过 PowerShell 只有 New-TemporaryFile 这个方法,不能直接一个命令创建文件夹。

所以我们要使用常规一点的方法来实现,也就是拼接要创建的 temp 文件夹名,然后跳转过去。

function cdtmp {
    $parent = [System.IO.Path]::GetTempPath()
    $name = 'artin-' + $([System.IO.Path]::GetRandomFileName()).Split(".")[0]
    New-Item -ItemType Directory -Path (Join-Path $parent $name)
    cd (Join-Path $parent $name)
}

直接把这段代码放入 $PROFILE 文件中就好了。

参考链接

Loading comments...