0%

shell 技巧集合

积累一些shell的命令和用法。

shell 压缩文件夹

1
tar zcvf [打包后生成的文件名全路径(也可以是相对路径)] 要打包的目录

比如,想把当前文件夹的dist文件夹打包成压缩包:

1
tar zcvf dist.tar.gz ./dist

解压缩文件

1
tar zxvf [需要解压缩的文件]

解压会解压在当前文件夹。

将文件上传到服务器

1
scp [文件所在本地路径] username@servername:[服务器路径]

例如,我需要将上面生成的压缩文件上传到服务器的data路径,那么可以:

1
scp ./dist.tar.gz root@121.41.40.138:/data

但这样是需要输入的内容比较多,而且要再次输入服务器的密码。那能不能再服务器的shell里面直接上传呢?🤔

可以使用pem格式的私钥,.pem格式的文件既是私钥,也是公钥。用pem的密钥方式登录就可以不用输入密码。

1
scp -r -i ~/.ssh/aliyun-tcs.pem ./blog-$(date +%Y%m%d-%H-%M).tar.gz root@121.41.40.138:/data/wwwroot/hexo_blog

解压zip文件:

1
unzip filename.zip

由于Windows下的压缩包多为zip,所以在mac上解压缩的时候会有乱码的问题,如果解压出错(err22)的话需要命令:

1
ditto -V -x -k --sequesterRsrc filename.zip destination

filename.zip是你要解压的zip压缩文件,destination是解压后的文件存放的路径。

生成ssh

1
ssh-keygen -t rsa -C "your_mail@example.com" -f github_rsa

给文件权限

比如想给我们的发布脚本执行权限:

1
chmod +x deploy.sh

递归查找字符串

比如我们想在src/app文件夹中查找english这个字符串:

1
grep -rn 'english' src/app

grep选项:

  • -r是递归查找
  • -n 在找到的结果中显示行号
  • -R 查找所有文件包含子目录
  • -i 忽略大小写

批量重命名

(macOS)重命名可以采用rename命令,这个需要从brew中安装:

1
brew install rename

重命名当前的文件:

1
rename 's/old/new/' *.png

那假如有一个angular的项目,现在希望从less转换到scss,想把项目文件夹里面的所有.less文件转换为.scss文件,怎么搞?

需要结合findxargs命名。find命名找到所有的文件,然后通过xargs传递给rename命令:

1
find . -name '*.less' | xargs rename 's/less/scss/'

即可全部转换为scss文件。

也可以使用正则表达式,比如我现在有文件:

1
2
3491699_photos.tcs-y.com.key
4757483_blog.tcs-y.com.key

我先删除掉前面的数字和下划线,只留下后面的名字,那只需要运行:

1
$ rename "s/(\d+)_//" * 

very good! o( ̄▽ ̄)d

批量删除

有文件分布在不同的目录,需要全部删掉,那么需要。比如,我在拉了代码后发现有很多的.DS_Store

1
2
3
4
5
6
Untracked files:
(use "git add <file>..." to include in what will be committed)
.DS_Store
css/.DS_Store
js/.DS_Store
less/.DS_Store

先用find命令找到这些文件:

1
$ find -name '.DS_Store'

可以看到:

1
2
3
4
5
6
$ find . -name '.DS_Store'                                                                                          130 ↵
./app-editor/.DS_Store
./.DS_Store
./css/.DS_Store
./less/.DS_Store
./js/.DS_Store

然后组合这个命令将找到的文件路径传递给rm -rf命令即可:

1
$ find . -name '.DS_Store' | xargs rm -rf

然后再用git status查看,发现这些文件都删除了,nice!

npm/yarn 安装node-sass缓慢

安装过几次node-sass都非常缓慢,甚至于没有响应(其实就是非常慢而已)。怎么办?

确保已经将源设置为了淘宝的源:

1
$ npm config set registry https://registry.npm.taobao.org

还是很慢,因为除了npm的部分代码外,还会下载二进制文件binding.node,默认源是github。所以我们将这个改为国内的源:

1
$ SASS_BINARY_SITE=https://npm.taobao.org/mirrors/node-sass/ yarn add node-sass

alias 别名

有时候装的一些软件(比如Ohmyzsh)会自动附带一些插件(比如git)会有自带的alias别名,假设我们定义的一些别名有冲突的话就很麻烦,我们需要找到这个插件是在哪里定义的,我们可以用下面的命令找(这里用gm来做演示):

1
$ bash -ixlc : 2>&1 | grep gm

如果找不到的话就用:

1
$ zsh -ixlc : 2>&1 | grep gm

如果找到的话,会在羡慕列出对应的别名在哪个文件中。

对于一些讨厌的alias,我们可以直接取消它:

1
unalias gm

😊

参考文章:为什么node-sass总是安装失败

码字辛苦,打赏个咖啡☕️可好?💘