重命名多个文件-对应文件中的列表

重命名多个文件-对应文件中的列表

我是 Linux - Ubuntu 的新学习者。我需要重命名大量文件(保留相同的扩展名),这些文件与文件中的名称列表相对应。我有一个文本文件中的名称列表。

例如

当前文件名 => 新文件名

GCA_001340506.1_ASM54621.fna => 蜡.fna

GCF_0133435.1_ASM4354653.fna => 菌株2213.fna

我需要用新文件名重命名当前文件名。如我们所见,我需要做两件事:首先匹配相应的文件名,然后重命名它。

我找不到合适的方法来完成这个任务。请在这方面帮助我。

阿万

答案1

如果您的文件格式是,source.fna => target.fna您可以使用mmv它来重命名文件。通过from to在命令行上省略参数,mmv 将在标准输入上采用源-目标对,每行一个。

awk -F '=>' '{print $1 $2}' files.txt | mmv

mmv实际上可以直接处理这种格式,但这更多的是一种巧合。

mmv 忽略标准输入中看起来像其自己的错误和“完成”消息的行,以及以空格开头的所有行,并且会接受带有或不带有中间“->”(或“-^”、“=>”或“=^”)的模式对。

cat file.txt | mmv

答案2

我创建了以下函数。您必须以这种方式使用:

$ furqan_mv 文件名.txt

文件 filenames.txt 必须具有以下格式:

旧文件 => 新文件

扩展始终是弗纳。函数如下:

furqan_mv() {
ext=".fna"
while IFS= read -r line; do
    oldfile=`echo $line | awk '{print $1}'`
    newfile=`echo $line | awk '{print $3}'`
    mv $oldfile.$ext $newfile.$ext
done < $1
}

答案3

欢迎来到 Askubuntu!

这有用吗?


我从中取了这些名字:

https://unix.stackexchange.com/questions/613880/rename-multiple-files-accordingly-with-names-list#613880

因为您没有包含新文件名所在的文件的内容

for file in *.fna;

 do
  read line;
   
   mv -v "${file}" "${line}"; done < names.txt

测试运行输出例如文件

  • 1.pdf > Fabio.pdf

相关内容