0%

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

生成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文件。