Umbenennen von Dateien ohne Dateierweiterungen

Umbenennen von Dateien ohne Dateierweiterungen

Ich habe eine Reihe von Dateien mit dem Namen KLLxxx(das xsteht für Zahlen). Es sind Textdateien, aber sie haben keine Dateierweiterung. Nur Dateien mit dem Namen KLLgefolgt 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 $1Variable. Das sam 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, $1und .fastqdaran angehängt wird.

prename 's/(KLL\d{3})/$1.fastq/' KLL*

Antwort2

Das Ausführen des folgenden findBefehls in dem von Ihnen angezeigten Verzeichnis funktioniert:

find . -name 'KLL[0-9][0-9][0-9]' -exec sh -c 'mv $0 $0.fastq' {} \;

.fastqDadurch wird jedem Dateinamen, der mit beginnt, die Erweiterung hinzugefügt, KLLgefolgt 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

verwandte Informationen