Ich möchte ein Skript schreiben, mit dem ich Dateien in ein Unterverzeichnis verschieben kann. Sollte eine Datei schon vorhanden sein, dann soll ein Suffix an den Namen angehängt werden. Also falls name.jpg schon vorhanden ist, dann soll die Datei als name_1.jpg verschoben werden. Wie geht das? Ich weiß nur, dass die Option "-n" ein Überschreiben verhindert.
Dateien verschieben und ggf. umbenennen
Anmeldungsdatum: Beiträge: 767 |
|
||||
Anmeldungsdatum: Beiträge: 1640 |
Wo sind denn die Quelldateien zu finden, die verschoben werden sollen? Liegen diese alle im gleichen Verzeichnis, im gleichen Dateisystem oder über mehrere Verzeichnisse und evtl. sogar Dateisysteme verteilt? |
||||
Ehemalige
Anmeldungsdatum: Beiträge: 4403 Wohnort: Sachsen |
👍
Jetzt musst du es nur noch in ein Skript schreiben und testen. |
||||
(Themenstarter)
Anmeldungsdatum: Beiträge: 767 |
Es sollen Dateien, die mit IMAG beginnen, vom aktuellen Verzeichnis in ein Unterverzeichnis verschoben werden. So ähnlich: mv "IMAG*.jpg" unterverzeichnis/ Dabei soll keine Datei verloren gehen. Ich werde mal ein paar Tests machen. |
||||
Anmeldungsdatum: Beiträge: 645 Wohnort: Freiburg |
Ich als Laie, der nach Möglichkeit einen großen Bogen um sed, awk und reguläre Ausdrücke macht 😉 , würde das so lösen: Es gibt für mv eine Option "--backup" zum Backup einer bereits vorhandenen Datei gleichen Namens. Mit mv --backup=t datei.jpg Unterverzeichnis verschiebst Du die Datei datei.jpg ins Unterverzeichnis, wobei eine vorhandene namensgleiche Datei nicht überschrieben, sondern in datei.jpg~1~ (bzw. datei.jpg~2~ etc.) umbenannt wird. Vielleicht genügt Dir das ja schon. Solltest Du aber auf dem Namensmuster datei_1.jpg bestehen, könntest Du zusätzlich eine entsprechende Datei mit Hilfe von mmv erzeugen: mv --backup=t datei.jpg Unterverzeichnis && mmv -cdv "Unterverzeichnis/*.*.~*~" "Unterverzeichnis/#1_#3.#2" |
||||
Anmeldungsdatum: Beiträge: 7174 Wohnort: Wolfen (S-A) |
Ich würde in diesem Fall, wenn es sein muss, auch eher zum Standard-Backup mit nachträglichen Umbenennen neigen: track@track:~$ touch datei.jpg~1~ track@track:~$ rename -v 's/(\..+)~([0-9]+)~/_$2$1/' *~+([0-9])~ datei.jpg~1~ renamed as datei_1.jpg also am Ende so:
LG, track |