
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 rename
und mv
andere 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, -n
um 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 $name
steht der Name einer dieser Dateien.
Angesichts des Namens E9-GOWN33_multiplemap.bin.10.fa
in $name
können wir das E9-GOWN33_multiplemap
Bit vom Anfang des Namens entfernen mit
${name#E9-GOWN33_multiplemap}
Dann muss nur noch die ursprüngliche E9
Zeichenfolge wieder an der Vorderseite befestigt werden, um Folgendes zu erstellen E9.bin.10.fa
:
newname=E9${name#E9-GOWN33_multiplemap}
Mit mv
kö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.