Frage mv, umbenennen wenn existiert


Ich muss viele Bilder in einem Verzeichnis zusammenstellen. Viele dieser Bilder haben die gleichen Dateinamen.

Gibt es eine sichere Version von mv Dadurch werden Dateien automatisch umbenannt, wenn der Zieldateiname bereits existiert pic1.jpeg wird so etwas wie pic1_2.jpeg?

Ich könnte mein eigenes Python-Skript schreiben, aber da muss es so etwas geben, also kann ich Folgendes tun:

find . -type f -name *.jpg -exec mvsafe '{}' /targetpath/ \;

25
2018-05-07 08:46


Ursprung




Antworten:


mv unterstützt das bereits standardmäßig (zumindest in Debian):

mv --backup=t <source_file> <dest_file>

Wie in der Manpage von mv (1) zu sehen ist:

--backup[=CONTROL]
         make a backup of each existing destination file

The  backup  suffix  is  `~',  unless  set  with   --suffix   or   SIM‐
PLE_BACKUP_SUFFIX.   The version control method may be selected via the
--backup option or through the  VERSION_CONTROL  environment  variable.

Zu machen --backup=t bedeutet "mache nummerierte Backups", wie folgt aufrufen: env VERSION_CONTROL=numbered mv --backup=t <source_file> <dest_file> (dest_file kann natürlich ein Verzeichnis sein).


34
2018-05-07 10:35



+1 für eine erstaunlich saubere Lösung. Übrigens ist die Option auch auf RHEL 6 vorhanden. - Paweł Brodacki
Während nette Funktionalität, hilft das nicht wirklich viel in meinem Fall, da es das Suffix nach der Erweiterung anhängt, so dass die Dateien mit Namen wie .jpg ~ 1 ~ enden werden, während ich sie _1.jpg nennen müsste. Ich werde wahrscheinlich mmv verwenden, um die Dateien nach dem Verschieben umzubenennen. - theduke
Dies ist der Befehl mmv, der nach dem Ausführen von mv --backup = nummeriert: mmv -v das gewünschte Ergebnis erzielt... # * # # 1 # # # # # 2 - theduke
Auf meinem Debian-System (mmv 1.01b-18) lautet der korrekte mmv-Befehl: mmv -v "*.*~*~" "#1_#3.#2" - Xavier