好久好久之前,看 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
文件中就好了。