ループを使用して複数のファイルの名前を変更する

ループを使用して複数のファイルの名前を変更する

一部のファイルの名前を変更するにはループを使用する必要がありますが、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

rename私はスレッドで見たと他のループを使用しましたが、mvまだ動作しません。どんな意見でも大変感謝します!ありがとうございます!

答え1

renamePerl(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これらのファイルの1つの名前があります。

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コマンドは、ファイル名を新しいファイル名に変更するために使用されます。

関連情報