我是 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!
这有用吗?
我从中取了这些名字:
因为您没有包含新文件名所在的文件的内容
for file in *.fna;
do
read line;
mv -v "${file}" "${line}"; done < names.txt
测试运行输出例如文件
- 1.pdf > Fabio.pdf