Skip to content

Shell

使用 Shell 脚本协助开发。

tree 命令

tree 命令用于列出某个目录下的所有文件或文件夹。

安装

macOS 默认无 Tree 命令。

bash
brew install tree

常用参数

  • -L 指定遍历层级

  • -d 只列出文件夹

  • -I 过滤指定的文件或文件夹

  • -i 不输出缩进行

  • J 输出为 JSON 格式

  • X 输出为 XML 格式

  • H 输出为 HTML 文档格式

  • o 输出至对应文件名文件

使用示例

bash
# 输出至粘贴板
tree . | pbcopy

# 输出至当前目录下的 DIRECTORY.md
tree -L 2 > DIRECTORY.md

# 遍历当前目录下层级为2的所有目录 忽略node_modules目录 将文件树输入至 directory.md
tree -L 2 -d  -I "node_modules" > directory.md

find 命令

find 命令用于查找符合条件的所有文件,条件可以试命名或者是时间。

常用参数

  • maxdepth 指定遍历层级
  • regex 正则匹配文件名
  • name 正则匹配文件名
  • type 匹配类型 f 代表 文件,d 代表目录。
  • mtime 日期范围 后面跟 数字 代表天数,有正负区别。
  • mmin 分钟范围 同上
  • ! -path 排除文件或者目录
  • exec 对匹配的文件目录执行操作

使用示例

bash
# 删除当前目录下所有名字格式为 nodePipe*.sock的文件
find . -maxdepth 1 -regex "nodePipe*.sock" -exec rm -rf {} \;

# 同上
find . -maxdepth 1 -name "nodePipe*.sock" -exec rm -rf {} \;

# 同上 xargs 用于把前面的输出作为后面的参数
find . -maxdepth 1 -name "nodePipe*.sock" | xargs rm -rf

# 显示当前目录下20天前的目录
find . -type d -mtime +20 -exec ls -l {} \;

find . -type d -mtime +20 ! -path ./node_modules  -exec ls -l {} \;

TIP

另外可以使用 -ok 来替换 -exec 来执行操作,它多了提示的功能,每一步都需用户确认,这样删除文件更安全。

参考文档

rm 命令

rm 命令用于删除目录或者文件。

常用参数

  • r 递归删除
  • f 强制删除

使用示例

bash
# 删除当前目录下所有 *.txt 命名的文件,除了test.txt
rm `ls *.txt|egrep -v test.txt`

scp 命令

scp (secure copy) 命令用于 Linux 系统之间的文件或目录的复制。

常用参数

  • r 递归复制目录
  • q 不显示传输进度条
  • C 允许 ssh 开启压缩功能
  • P 指定数据传输使用的端口号

使用示例

WARNING

使用 scp 命令需保证用户对远程服务器具有相应的文件权限,否则无作用。

bash
scp -P port_number local_file user_name@server_ip:server_path_start_with_slash

scp -P 123456 x.tar.gz ntnyq@111.111.111.111:/data/static
bash
# 复制服务器文件
scp -P 9527 root@0.0.0.0:/home/root/tmp/foo.zip /home/root/tmp/bar.zip

# 复制服务器目录
scp -r root@0.0.0.0:/home/root/tmp/ /home/root/tmp/

# 复制本地文件至服务器
scp -P 9527 /home/root/tmp/bar.zip 0.0.0.0:/home/root/tmp/foo.zip

# 复制本地目录至服务器
scp -r /home/root/tmp/ 0.0.0.0:/home/root/tmp/

若未指定用户名,则命令执行后需要输入用户名和密码,否则只输入密码即可。

参考资料

实用技巧

个人开发中常用的小技巧。

配置免密登录服务器

测试于 Windows 服务器下的 Git bash 客户端。

bash
# 本机执行命令
ssh-keygen -t rsa # 连续回车 在本地生成ssh公钥和私钥
ssh root@your_server_ip # 需要输入密码

# 主机执行命令
mkdir .ssh # 若已经存在 则无需创建
chmod 0700 .ssh # 必须给.ssh目录700权限

# 本机执行命令
scp ~/.ssh/id_rsa.pub root@your_server_ip:.ssh/id_rsa.pub # 需要输入密码

# 主机执行命令
touch /root/.ssh/authorized_keys # 若已存在,无需创建
chmod 600 ~/.ssh/authorized_keys # 必须修改加权限
cat /root/.ssh/id_rsa.pub >> /root/.ssh/authorized_keys # 需要使用2个>>来进行追加

# 配置已经完成
# 本机测试
ssh root@your_server_ip

获取当前 unix 时间戳

bash
# 获取时间戳
date +%s

# 将时间戳作为环境变量使用
cross-env VITE_BUNDLE_TIME=$(date +%s) pnpm run build

压缩解压文件

Tar 命令。

bash
# 压缩目录 foobar 为文件 foobar.tar.gz
tar -czvf foobar.tar.gz foobar


# 解压文件 不指定 -C 参数则解压至当前目录
tar -xzvf foobar.tar.gz -C target_path

CC BY-NC 4.0