Servus zusammen,
Ich bin ein ziemlicher Neuling in Sachen Bash&Co.
Ich habe ein kleines Problem, welches ich kurz beschreiben möchte. Ich besitze ca 1500 Dateien die sich in der Länge des Dateinamens nur um 2 Stellen unterscheiden.
Beispiel:
59k_1bin_hemocyanin_pos_9_1-2_1.mrc; 59k_1bin_hemocyanin_pos_99_3-3_1.mrc; 59k_1bin_hemocyanin_pos_157_3-1_1.mrc
Heißt die letzte Datei ist 2 Zeichen länger als die erste.
Diese Dateien muss ich nun umbenennen und zwar einfach auflisten von 1-1500 also
59k_1bin_hemocyanin_pos_9_1-2_1.mrc --> 1.mrc ; 59k_1bin_hemocyanin_pos_9_1-2_2.mrc --> 2.mrc usw..
Nun zu meinem Script was ohne Probleme klappt wenn die Dateien alle gleich lang sind
1 2 3 4 5 6 7 | COUNTER=0 for i in `ls *.mrc | cut -b 1-33`; do mv ${i}.mrc ${COUNTER}.mrc let COUNTER=COUNTER+1 done |
wenn ich
cut -b 1-33
nehme, sagt er bei den kürzeren Dateien, dass er diese nicht findet... wenn er an eine Datei mit der richtigen Länge ankommt benennt er sie um, fängt aber dann nicht mehr mit 1 an sondern an der Stelle wo er gerade ist also zum Beispiel 32.mrc 33.mrc 34.mrc dann kommen wieder Dateien die von der Länger nicht passen, bis wieder eine passende kommt. Dann gehts weiter mit zB. 84.mrc 85.mrc...
Meine Frage nun, gibt es eine Möglichkeit beim cut-Befehl etwas zu verwenden das einfach nur den Dateinnamen abschneidet, die Endung behält und dann von 1-1500 umbenennt? Das Abschneiden von 1 oder 2 Zeichen bei den längeren Dateien ging bei mir in die Hose da plötzlich doppelte Dateien auftauchten ☹
Ich hoffe ich konnte mein Problem einigermaßen beschreiben. Mir fällt einfach gerad überhaupt nichts ein
Liebe Grüße und Danke schon mal
Bearbeitet von rklm:
Codeblöcke für die Lesbarkeit. Bitte die Vorschaufunktion nutzen.