知易通
第二套高阶模板 · 更大气的阅读体验

让Shell命令跑得更快:几个实用提速技巧

发布时间:2025-12-13 02:44:57 阅读:264 次

在家用电脑处理大量文件时,比如整理照片、批量重命名下载内容,或者备份家庭资料,经常要用到Shell命令。可有时候敲完命令,光标一直闪,等半天没反应,挺耽误事。其实稍微调整下写法,速度能明显提升。

减少管道和子进程

很多人习惯把命令串成一长串,像这样:

cat file.txt | grep "error" | awk '{print $2}' | sort | uniq

每加一个竖线|,系统就要开个新进程。进程来回传数据,耗时间。改成用awk一次性处理,能省不少开销:

awk '/error/ {print $2}' file.txt | sort -u

sort -u 比先sort再uniq更干脆。

善用内置功能,少调外部命令

Bash本身就能做些简单操作,没必要总靠echo、sed、cut这些外援。比如取变量长度,别这么写:

len=$(echo ${var} | wc -c)

直接用内置语法更快:

len=${#var}

类似地,字符串截取、替换都可以用${var//pattern/replacement}搞定,比sed轻快得多。

避免在循环里频繁调用命令

想遍历一堆日志文件查关键词,有人会这么写:

for file in *.log; do
    lines=$(grep "failed" "$file" | wc -l)
    echo "$file: $lines"
done

每个文件都单独启动grep和wc,文件一多就卡。合并处理更高效:

grep "failed" *.log | cut -d: -f1 | sort | uniq -c

一条命令扫完所有文件,结果也清晰。

用并行处理代替串行等待

如果要压缩多个大文件,一个接一个压太慢:

for f in *.txt; do
    gzip "$f"
done

换成并行方式,充分利用CPU空闲时间:

for f in *.txt; do
    gzip "$f" &
done
wait

后台运行每个gzip任务,整体时间能缩短一大截。家里老电脑也能跑出新效率。

选择更快的工具替代品

有些命令天生就比同类快。比如用ripgrep(rg)代替grep,速度快很多,尤其搜大目录时:

rg "重要发票" ~/Documents

安装后几乎零配置,正则支持还更友好。类似地,fd比find简洁快速,适合日常查找。

优化不是非得改代码结构,很多时候换种写法、换个工具,原来等一分钟的事,十秒就搞定。家里的电脑不用升级硬件,也能用得更顺手。