如何根据文本文件中的两列内容重命名tgz文件
批量重命名文件的方法
假设映射文本文件名为map.txt,内容如下:
s-10 Tom s-11 Harry s-12 Peter
以下是两种可行的重命名方案:
方案一:Bash循环逐行处理
直接通过while循环读取映射文件内容,执行重命名操作:
# 先测试命令是否正确(替换mv为echo) while read -r old_prefix new_name; do echo mv "${old_prefix}.tgz" "${new_name}.tgz" done < map.txt # 确认命令无误后,去掉echo执行实际重命名 while read -r old_prefix new_name; do mv "${old_prefix}.tgz" "${new_name}.tgz" done < map.txt
方案二:Awk生成命令并执行
用Awk批量生成重命名命令,再通过Shell执行:
# 测试命令(生成mv命令但不执行) awk '{printf "mv \"%s.tgz\" \"%s.tgz\"\n", $1, $2}' map.txt # 执行实际重命名 awk '{printf "mv \"%s.tgz\" \"%s.tgz\"\n", $1, $2}' map.txt | sh
注意事项
- 执行重命名前建议先通过
echo或仅生成命令的方式验证,避免误操作 - 如果新文件名包含空格或特殊字符,上述方案已通过双引号处理,可正常适配
内容的提问来源于stack exchange,提问作者shome
相关产品推荐
相关产品推荐

