使用循環重命名多個文件

使用循環重命名多個文件

我需要使用循環重命名一些文件,但我無法讓它工作,因為我對 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 指令用於使用新檔名重命名檔。

相關內容