使用循环重命名多个文件

使用循环重命名多个文件

我需要使用循环重命名一些文件,但我无法让它工作,因为我对 Linux 还很陌生。需要重命名的文件有:

E9-GOWN33_multiplemap.bin.10.fa  
E9-GOWN33_multiplemap.bin.16.fa  
E9-GOWN33_multiplemap.bin.21.fa  
E9-GOWN33_multiplemap.bin.7.fa

更短的名称,例如:

E9.bin.10.fa
E9.bin.16.fa
E9.bin.21.fa
E9.bin.7.fa

我已经使用了renameandmv以及我在线程中看到的其他循环,但仍然无法让它工作。非常感谢任何意见!谢谢你!

答案1

如果你有 perl rename(Ubuntu、Debian 和许多其他系统上默认),你可以这样做

rename -n 's/-GOWN33_multiplemap//' ./*fa

如果这为您提供了正确的文件名,请运行而不-n实际重命名它们:

rename 's/-GOWN33_multiplemap//' ./*fa

答案2

你可以试试这个:

for f in *.fa; do 
  echo mv -- "$f" "${f%-*}.${f#*.}"
done

结果:

E9.bin.10.fa
E9.bin.16.fa
E9.bin.21.fa
E9.bin.7.fa

答案3

假设所有这些文件都位于当前目录中,并且所有这些文件(没有其他文件)都与通配模式匹配

E9-GOWN33_multiplemap.bin.*.fa

然后,你可以循环这些

for name in E9-GOWN33_multiplemap.bin.*.fa; do
   # more code here
done

在循环内,$name将是这些文件之一的名称。

E9-GOWN33_multiplemap.bin.10.fa给定中的名称$name,我们可以使用以下E9-GOWN33_multiplemap命令从名称开头删除该位

${name#E9-GOWN33_multiplemap}

E9然后只需将初始字符串重新附加到要创建的字符串的前面即可E9.bin.10.fa

newname=E9${name#E9-GOWN33_multiplemap}

然后mv我们可以将旧文件名重命名为新文件名:

mv "$name" "$newname"

所以,这样我们就有了

for name in E9-GOWN33_multiplemap.bin.*.fa; do
    newname=E9${name#E9-GOWN33_multiplemap}
    mv "$name" "$newname"
done

或者更短,

for name in E9-GOWN33_multiplemap.bin.*.fa; do
    mv "$name" "E9${name#E9-GOWN33_multiplemap}"
done

答案4

for f in *.fa; do mv -- "$f" "${f/-*p./.}"; done
  • 输入:
    E9-GOWN33_multiplemap.bin.7.fa
    E9-GOWN33_multiplemap.bin.10.fa
    E9-GOWN33_multiplemap.bin.16.fa
    E9-GOWN33_multiplemap.bin.21.fa
    
  • 输出:
    E9.bin.7.fa
    E9.bin.10.fa
    E9.bin.16.fa
    E9.bin.21.fa
    

你也可以使用这个脚本:

#!/bin/bash

# Set the directory path where the files are located
directory="/path/to/files"

# Loop through the files in the directory
for file in "$directory"/E9-GOWN33_multiplemap.bin.*.fa; do
    # Extract the original filename
    filename=$(basename "$file")
    
    # Extract the numeric part from the original filename
    number=$(echo "$filename" | awk -F'.' '{ print $3 }')
    
    # Create the new filename
    new_filename="E9.bin.$number.fa"
    
    # Rename the file
    mv "$file" "$directory/$new_filename"
done

在此脚本中,for 循环迭代指定目录中与模式 E9-GOWN33_multiplemap.bin.*.fa 匹配的文件。在循环内,使用基本名称提取原始文件名。然后,使用 awk 提取数字部分。最后,通过将固定部分(E9.bin.)与提取的数字组合来构造新的文件名。 mv 命令用于使用新文件名重命名文件。

相关内容