在 Linux 中,“批量处理文件”通常指对大量文件执行相同的操作(重命名、移动、修改内容、转换格式等)。下面按常见场景给你一套实用方法,从简单到进阶,基本够用 90% 的情况。
for 循环批量处理(通用、安全)for f in *.txt; do
mv "$f" "${f%.txt}.bak"
done
✅ 把 *.txt 改为 *.bak
for f in *.log; do
sed -i 's/ERROR/CRITICAL/g' "$f"
done
✅ 把所有 .log 文件中的 ERROR 替换为 CRITICAL
for f in *.jpg; do
convert "$f" -resize 800x600 "small_$f"
done
✅ 批量压缩图片(需 ImageMagick)
rename(Perl 版本,最强大)rename 's/\.htm$/.html/' *.htm
✅ .htm → .html
rename 'y/A-Z/a-z/' *
✅ 文件名全部转小写
⚠️ 注意:不同发行版 rename 语法不同(Debian / CentOS 有差异)
mmv(适合模式匹配)mmv "*.JPG" "#1.jpg"
✅ 批量改后缀
find . -name "*.tmp" -type f | while read f; do
rm "$f"
done
find . -name "*.log" -mtime +30 -exec rm {} \;
✅ 删除 30 天前的日志
chmod 644 *.sh
或递归:
find . -name "*.sh" -exec chmod +x {} \;
sed(流编辑)sed -i 's/foo/bar/g' *.conf
awk(按列处理)awk '{print $1}' *.txt > output.txt
for f in *.tar.gz; do
tar -xzf "$f"
done
tar -czf all.tar.gz *.log
xargsls *.jpg | xargs -n1 -P4 convert -resize 50%
✅ 4 个进程并行处理
✅ 先测试,再执行
for f in *.txt; do
echo "mv $f ${f}.bak"
done
✅ 用引号防止空格问题
"$f"
✅ 避免在根目录或重要目录乱跑 rm
| 需求 | 推荐方式 |
|---|---|
| 简单循环 | for |
| 复杂重命名 | rename |
| 按条件处理 | find |
| 文本替换 | sed |
| 并行处理 | xargs |
你可以直接告诉我:
.txt / .jpg / .log 等)我可以给你一条命令或完整脚本 ✅