如何通过终端批量重命名文件并提取压缩文件前10万行
批量文件处理解决方案
嘿,我来帮你搞定这两个批量操作的问题,都是新手友好的方案,不用纠结复杂的正则或者教程细节~
1. 一次性重命名多个文件
下面给你几种最常用的场景,选适合你的就行:
场景1:批量修改文件后缀
比如要把所有.txt文件改成.md,两种简单方法:
- 用
rename命令(基础正则,好理解):
解释:rename 's/\.txt$/.md/' *.txts/旧内容/新内容/是替换规则,\.txt$匹配文件名末尾的.txt,换成.md,*.txt指定要处理的文件范围。 - 用bash循环(更直观,不用记正则):
解释:for file in *.txt; do mv "$file" "${file%.txt}.md"; done${file%.txt}会自动去掉文件名最后面的.txt后缀,再加上.md就是新文件名。
场景2:给所有文件加统一前缀
比如给所有.jpg文件加前缀vacation_:
for file in *.jpg; do mv "$file" "vacation_$file"; done
场景3:替换文件名里的特定字符
比如把文件名里的空格换成下划线:
- 用
rename全局替换:
解释:末尾的rename 's/ /_/g' *g表示全局替换(把所有空格都换掉,不是只换第一个)。 - 用bash循环:
解释:for file in *\ *; do mv "$file" "${file// /_}"; done${file// /_}表示把文件名里所有空格都换成下划线。
2. 批量提取.tagAlign.gz文件的前100,000行到未压缩文件
这个用bash循环+zcat(读取压缩文件内容)+head(取前N行)就能一步搞定:
for file in *.tagAlign.gz; do zcat "$file" | head -n 100000 > "${file%.tagAlign.gz}.tagAlign"; done
细节解释:
zcat "$file":直接读取当前压缩文件的内容,不用提前解压head -n 100000:只保留文件的前100,000行> "${file%.tagAlign.gz}.tagAlign":把结果输出到和原文件同名,但去掉.gz后缀的新文件里
小提醒: 先拿1个测试文件试试手,比如:
zcat test.tagAlign.gz | head -n 1000 > test.tagAlign
确认内容没问题后,再跑上面的批量命令,避免意外~
内容的提问来源于stack exchange,提问作者Eliza




