--- title: "一个非常省事的命令: cdtmp" date: 2020-08-21 15:14:50 updated: 2020-11-26 20:51:00 categories: Shell tags: - 效率 - PowerShell - zsh comments: true toc: true permalink: posts/cdtmp/ --- 好久好久之前,看 sorrycc 的视频的时候,发现他用了一个很 tricky 的命令:`cdtmp`,执行命令后 shell 就会跳到 `/tmp/sorrycc-xxxxxx` 文件夹下,觉得十分好用。 自己也用了蛮久了,真的十分好用,有很多场景都需要用到: 想写一个验证想法的小 case,或者验证一下某个函数的用处,或者 clone 一下某个仓库查看一下相关内容。直接 `cdtmp` 打开一个临时文件夹,在里面直接做你想做的事情,而且完全不需要担心这些文件后续的清理问题,Windows 来说使用清理软件清理垃圾时一般都会删除临时文件,Linux 下也有相应的清除 tmp 目录的逻辑和方法。 简单介绍一下这个命令,给出 zsh 中的实现以及一个 Windows 下 `PowerShell` 里的同样功能的函数。 命令的作用就是:在系统的临时目录创建一个文件夹然后跳转过去。 ## zsh sorrycc 提到的 `cdtmp`: {% blockquote sorrycc https://github.com/sorrycc/zaobao/issues/2 %} cdtmp,进入到一个随机创建的临时目录,简单好用,http://frantic.im/cdtmp {% endblockquote %} [原文](http://frantic.im/cdtmp) 中给出了 zsh 中的实现的链接。 把下面这行代码添加到你的 `.zshrc` 文件即可: ```bash alias cdtmp='cd `mktemp -d /tmp/artin-XXXXXX`' ``` 这条命令会在系统临时目录下创建一个名为 `artin-XXXXXX` 的文件夹,然后跳转过去。 ## PowerShell > 我使用的是 PowerShell Core 7,如果你无法使用的话可以自己改改。 在 PowerShell 中单靠 `Set-Alias` 就没法实现这样的效果了(或者实现比较复杂),但可以写成一个函数,也非常简单,可以直接在 PowerShell 中执行。 不过 `PowerShell` 只有 `New-TemporaryFile` 这个方法,不能直接一个命令创建文件夹。 所以我们要使用常规一点的方法来实现,也就是拼接要创建的 temp 文件夹名,然后跳转过去。 ```powershell 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` 文件中就好了。 ## 参考链接 - [cdtmp](https://frantic.im/cdtmp) - [sorrycc 介绍 cdtmp](https://github.com/umijs/umi/issues/1614#issuecomment-452140570) - [sorrycc 早报 @ 2017.10](https://github.com/sorrycc/zaobao/issues/2) - [stackoverflow 上关于 PowerShell 创建临时文件夹的答案](https://stackoverflow.com/questions/34559553/create-a-temporary-directory-in-powershell) - [PowerShell New-TemporaryFile 命令详解](https://docs.microsoft.com/en-us/powershell/module/microsoft.powershell.utility/new-temporaryfile?view=powershell-7)