
ループを使用していくつかのファイルの名前を変更する必要がありますが、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
perl(Ubuntu、Debian、その他多くのシステムではデフォルト)をお持ちの場合はrename
、次のようにします。
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 に一致するファイルを反復処理します。ループ内では、basename を使用して元のファイル名が抽出されます。次に、awk を使用して数値部分が抽出されます。最後に、固定部分 (E9.bin.) と抽出された数値を組み合わせて新しいファイル名が作成されます。mv コマンドを使用して、ファイルを新しいファイル名に変更します。