
Ich habe eine Reihe von Dateien mit dem Namen KLLxxx
(das x
steht für Zahlen). Es sind Textdateien, aber sie haben keine Dateierweiterung. Nur Dateien mit dem Namen KLL
gefolgt von drei Ziffern. Ich möchte, dass sie alle mit der Dateierweiterung enden .fastq
. Zum Beispiel KLL123
-> KLL123.fastq
.
Also habe ich versucht, diesen Befehl zu verwenden
mv KLL* KLL*.fastq
Aber ich bekomme immer wieder die Fehlermeldung:
mv: target 'KLL067.fastq' is not a directory
Ich kenne die Befehlsfunktion zum Umbenennen, habe aber noch nie Perl verwendet und weiß daher nicht, wie ich das angehen soll. Ich weiß, dass dies eine grundlegende Frage ist, aber ich probiere Linux zum ersten Mal aus.
Antwort1
prename
... mit Perl-Ausdrücken umbenennen. Der folgende Befehl nimmt die Liste der Dateien (KLL*), greift für jede Datei auf den vollständigen Namen von KLL plus drei Zahlen ( KLL\d{3})
) zu und speichert diese in der speziellen benannten $1
Variable. Das s
am Anfang des Ausdrucks bedeutet, dass das, was zwischen den ersten beiden steht, //
durch das ersetzt wird, was zwischen dem zweiten Satz steht, also dem vollständigen Dateinamen, $1
und .fastq
daran angehängt wird.
prename 's/(KLL\d{3})/$1.fastq/' KLL*
Antwort2
Das Ausführen des folgenden find
Befehls in dem von Ihnen angezeigten Verzeichnis funktioniert:
find . -name 'KLL[0-9][0-9][0-9]' -exec sh -c 'mv $0 $0.fastq' {} \;
.fastq
Dadurch wird jedem Dateinamen, der mit beginnt, die Erweiterung hinzugefügt, KLL
gefolgt von drei Ziffern.
Antwort3
Hier gibt es viele mögliche Lösungen, dies sollte eine sein:
for f in KLL*; do mv "$f" "$f.fastq"; done