一部のファイルの名前を変更するにはループを使用する必要がありますが、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
rename
Perl(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コマンドは、ファイル名を新しいファイル名に変更するために使用されます。