重命名从txt文件读取旧文件名和新文件名的文件bash

问题描述

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

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

读取.txt文件,其中实际和新的文件名选项卡分开:

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

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

请注意,如果需要,我还可以使用.csv或逗号分隔的.txt格式列出实际和新文件名的列表。感谢您的帮助。

解决方法

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。

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...