首页 > 解决方案 > 重命名从 txt 文件 (bash) 读取旧文件名和新文件名的文件

问题描述

我需要重命名目录中的一堆文件:

2016001.fas
2016002.fas
2016003.fas
...

阅读具有实际和新文件名选项卡分隔的 .txt:

2016001 L.innocua001
2016002 L.innocua002
2016003 L.monocytogenes001
...

也许在 bash 中使用单行 for 循环或管道。

作为说明,如果需要,我还可以使用 .csv 或逗号分隔的 .txt 格式获取包含实际文件名和新文件名的列表。我感谢所提供的帮助。

标签: bashrenamefile-rename

解决方案


xargs -a renames.txt -n 2 sh -c 'echo mv -- "$1.fas" "$2.fas"' _
  • xargs -a renames.txt: 处理renames.txt作为命令的参数的内容。
  • -n 2:一次选择 2 个参数。
  • sh -c: 命令是运行内联 shell
  • 内联外壳'echo mv -- "$1.fas" "$2.fas"':使用 xargs 提供的参数 1 和 2 执行实际的重命名。
# remove echo when output matches the intent
echo mv -- "$1.fas" "$2.fas"

仅使用 shell 读取renames.txt和执行重命名的方法:

while read -r a b; do
  # Remove echo if satisfied by the output
  echo mv -- "$a.fas" "$b.fas"
done <renames.txt

使用 awk 的替代方法,renames.txt使用重命名命令将文件转换为 shell 脚本:

awk '{print "mv -- "$1".fas "$2".fas"}' renames.txt

一旦满足上述 awk 的输出;保存到 shell 脚本文件,或直接通过管道传输到 sh。


推荐阅读