Umbenennen mehrerer Dateien mithilfe einer Schleife

Umbenennen mehrerer Dateien mithilfe einer Schleife

Ich muss einige Dateien mithilfe einer Schleife umbenennen, aber ich bekomme es nicht hin, da ich noch ein Neuling bei Linux bin. Die Dateien, die umbenannt werden müssen, sind:

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

durch einen kürzeren Namen wie:

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

Ich habe renameund mvandere Schleifen verwendet, die ich in Threads gesehen habe, aber ich bekomme es immer noch nicht zum Laufen. Ich bin für jeden Beitrag dankbar! Danke!

Antwort1

Wenn Sie Perl haben rename(Standard bei Ubuntu, Debian und vielen anderen Systemen), können Sie einfach

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

Wenn Sie dadurch die richtigen Dateinamen erhalten, führen Sie es ohne aus, -num sie tatsächlich umzubenennen:

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

Antwort2

Sie können Folgendes versuchen:

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

Ergebnis:

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

Antwort3

Angenommen, alle diese Dateien befinden sich im aktuellen Verzeichnis und alle diese Dateien und keine anderen Dateien entsprechen dem Globbing-Muster.

E9-GOWN33_multiplemap.bin.*.fa

Dann können Sie diese mit

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

Innerhalb der Schleife $namesteht der Name einer dieser Dateien.

Angesichts des Namens E9-GOWN33_multiplemap.bin.10.fain $namekönnen wir das E9-GOWN33_multiplemapBit vom Anfang des Namens entfernen mit

${name#E9-GOWN33_multiplemap}

Dann muss nur noch die ursprüngliche E9Zeichenfolge wieder an der Vorderseite befestigt werden, um Folgendes zu erstellen E9.bin.10.fa:

newname=E9${name#E9-GOWN33_multiplemap}

Mit mvkönnen wir dann den alten Dateinamen in den neuen umbenennen:

mv "$name" "$newname"

Damit haben wir

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

oder kürzer,

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

Antwort4

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

Sie können auch dieses Skript verwenden:

#!/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

In diesem Skript durchläuft die For-Schleife alle Dateien im angegebenen Verzeichnis, die dem Muster E9-GOWN33_multiplemap.bin.*.fa entsprechen. Innerhalb der Schleife wird der ursprüngliche Dateiname mithilfe von basename extrahiert. Anschließend wird der numerische Teil mithilfe von awk extrahiert. Schließlich wird der neue Dateiname konstruiert, indem die festen Teile (E9.bin.) mit der extrahierten Nummer kombiniert werden. Der Befehl mv wird verwendet, um die Datei mit dem neuen Dateinamen umzubenennen.

verwandte Informationen