Bash下批量重命名文件:移除双下划线及之前内容
Bash批量重命名:移除双下划线(__)及之前的内容
方法1:原生Bash参数扩展(无需额外工具)
直接用Bash自带的字符串处理功能循环处理,适配所有Bash环境:
for file in *.fastq.gz; do # 仅对包含__的文件执行操作 if [[ "$file" == *__* ]]; then mv -- "$file" "${file##*__}" fi done
解释:${file##*__} 是Bash参数扩展语法,##*__ 会贪婪匹配并移除从文件名开头到最后一个__的所有内容,直接保留后面的目标部分。
方法2:Perl版rename命令(推荐)
多数Linux发行版自带Perl版本的rename,用正则表达式批量处理更高效:
rename 's/.*__//' *.fastq.gz
解释:正则.*__匹配从文件名开头到最后一个__的全部字符,替换为空后直接得到目标文件名。
方法3:递归处理子目录文件
如果需要处理所有子目录下的对应文件,用find结合Bash命令实现:
find . -type f -name "*.fastq.gz" -exec bash -c ' for file do if [[ "$file" == *__* ]]; then dir=$(dirname "$file") new_name="${file##*__}" mv -- "$file" "$dir/$new_name" fi done ' bash {} +
必做测试步骤
执行重命名前,把mv换成echo预览效果,确保逻辑正确再执行:
for file in *.fastq.gz; do if [[ "$file" == *__* ]]; then echo "$file" -> "${file##*__}" fi done
内容的提问来源于stack exchange,提问作者Tiago Vieira
相关产品推荐
相关产品推荐

